{"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":"d8bb3d81-820d-42f4-ad7c-1d3ed96b1da8","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"4792cda19312782eb6de7aa23cae5c41a447559f40bde37e500f64e4d8a3cddf","dependsOn":["audit_imported_code"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"2d7d84a1a9972f1497e5bc68a704cbf42294d08c62d2868f102ffe3b909b9b51","skillId":"adapt-contract-project","tools":[]},"key":"adapt_contract_project","kind":"code","role":"implement","skillHash":"2d7d84a1a9972f1497e5bc68a704cbf42294d08c62d2868f102ffe3b909b9b51","skillId":"adapt-contract-project","state":"accepted"},{"acceptedSubmissionHash":"23f94c1d2b9ab402d97b19f8d2cb96d69a0985e716672c1b597f7065018ed8f9","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_economics","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"cbebedb957677cd6d51cc0fd3548ab3eeb96773a9d87b5d78fe44e17f8e05255","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_flow","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"e5b61ca2910b906d40562bce8ac8539527db197cc0cc2e686ab4a844ec09462f","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"9897597976b0e72440db7ca402d225aea20f3d37205ba53e7df2400ff80f29cc","skillId":"audit-imported-code","tools":[]},"key":"audit_imported_code","kind":"code","role":"review","skillHash":"9897597976b0e72440db7ca402d225aea20f3d37205ba53e7df2400ff80f29cc","skillId":"audit-imported-code","state":"accepted"},{"acceptedSubmissionHash":"8612964a2d3c98718c65230d38489ba73e943d6a05de959c43d3fd616b2abf1e","dependsOn":["adapt_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"af3aa01159bbf354f621cafa5c0006f6169e0938a8b015be508b7377dbf165bc","skillId":"audit-judge","tools":[]},"key":"audit_judge","kind":"code","role":"review","skillHash":"af3aa01159bbf354f621cafa5c0006f6169e0938a8b015be508b7377dbf165bc","skillId":"audit-judge","state":"accepted"},{"acceptedSubmissionHash":"bf21e8a90ca6650698348328c48efcf40b653ef061c11bbdb3ca7c952942db41","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_math","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"ea37fb9ab4e888c9b83f64857a88c7c24411f4462b97cbab33a1e11715d4945e","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_permissions","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"6ad4ce2c949a6d169f150f1c5673e8da5e64166d912c3a099bd4e44dc819aea4","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"5029c2676782267de6d24e23d69a1a1145fecb284b26c4c58cda19c2156ceda2","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"73431852439ad3a343f3d2b7db1c43cd363b9f48f9bb51497374a0cf6d50b223","skillId":"write-foundry-tests","tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"73431852439ad3a343f3d2b7db1c43cd363b9f48f9bb51497374a0cf6d50b223","skillId":"write-foundry-tests","state":"accepted"}],"objective":"Please deploy this repository as it is: contracts only, on Ethereum mainnet. There is no token and no owner.\n\nIt holds three contracts, to be created in this order: Questions, JobsReport, Payroll. Their constructor arguments are in docs/LAUNCH.md: six existing mainnet addresses (IMD, sIMD, the seat token, the seat Adapter, version 2 of the Intake and the oracle signer), the number 2000, three bytes32 feed ids, and two references to Questions. No argument is $owner: no contract has an owner, an admin or a setter.\n\nNothing has to be called after deployment. The constructors make no external call and check no code size, so they run on an empty chain. There is no proxy, no initializer, no pausing and no minting; the runtime bytecode holds no DELEGATECALL, CALLCODE or SELFDESTRUCT. forge test checks each of these statements (test/launch/LaunchManifest.t.sol).\n\nThe project builds with solc 0.8.26, EVM version cancun, optimizer 200 runs, via_ir, bytecode_hash = \"none\" and cbor_metadata = false, as foundry.toml already says. We believe no source file needs to change for the launch.\n\nThe manifest we expect (also in docs/LAUNCH.md, where a test checks it against the code):\n{\n \"kind\": \"evm_contracts\",\n \"contracts\": [\n  {\n   \"contract\": \"Questions\",\n   \"constructorArgs\": [\n    \"0xa43e6f75ee006411f79ac1c84120606c2330de82\",\n    \"0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7\",\n    \"0x5598aa9146215bc13eb26f2c692ad1461fd32982\"\n   ]\n  },\n  {\n   \"contract\": \"JobsReport\",\n   \"constructorArgs\": [\n    \"$contract:Questions\",\n    \"0x4bf83605cd50e9658472bde9be314bb3848a563301fa793328bef17ad2a07b61\",\n    \"0xfde22d9c1b97b7ce9763dff388a66366f9012d4ba7c57c3239377a75532bee4d\",\n    \"0x22ad8df0e0af07aa59e29aa7f5540e0022fbfda0651ccae3eccb968553a14835\"\n   ]\n  },\n  {\n   \"contract\": \"Payroll\",\n   \"constructorArgs\": [\n    \"0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7\",\n    \"0x9efa934d9fad4ae28c998a40195646b965a97247\",\n    \"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d\",\n    \"2000\",\n    \"0xde152afb7db5373f34876e1499fbd893a82dd336\",\n    \"$contract:Questions\",\n    \"0x4bf83605cd50e9658472bde9be314bb3848a563301fa793328bef17ad2a07b61\",\n    \"0xfde22d9c1b97b7ce9763dff388a66366f9012d4ba7c57c3239377a75532bee4d\",\n    \"0x22ad8df0e0af07aa59e29aa7f5540e0022fbfda0651ccae3eccb968553a14835\"\n   ]\n  }\n ],\n \"notes\": \"Contracts only. No token, no owner, nothing to call after deployment.\"\n}","parentJobId":null,"planHash":"6ea9689b01fbcf44408fe0faf21e293ef32bc610c00259b6f24dac1a2c8864bb","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"d8bb3d81-820d-42f4-ad7c-1d3ed96b1da8","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-1531-please-deploy-repository-contracts"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"52372","feedbackHash":"e01abd49a658b2276207149b540689a6f200e6c1e1c712a37e36aa591e29f36a","nodeKey":"adapt_contract_project","submissionHash":"4792cda19312782eb6de7aa23cae5c41a447559f40bde37e500f64e4d8a3cddf","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52678","feedbackHash":"179985c647c0e2e1481fed7a25f91a341221b278d0059f8d9e5b8d70d017acac","nodeKey":"audit_economics","submissionHash":"23f94c1d2b9ab402d97b19f8d2cb96d69a0985e716672c1b597f7065018ed8f9","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51368","feedbackHash":"2f08d29850f5210943a130598599578b11534a834b22b6dcd71783d6f79425e6","nodeKey":"audit_flow","submissionHash":"cbebedb957677cd6d51cc0fd3548ab3eeb96773a9d87b5d78fe44e17f8e05255","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"53895","feedbackHash":"7ad9e7e9e94ea2b8506da9a719953e62e12c1e0ca219b335a5d56b923a3f3487","nodeKey":"audit_imported_code","submissionHash":"e5b61ca2910b906d40562bce8ac8539527db197cc0cc2e686ab4a844ec09462f","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52609","feedbackHash":"d348afba07fd09df2dda4047ee7dcc26e5a7806ca1b35ec5846b47f5a924d5fe","nodeKey":"audit_judge","submissionHash":"8612964a2d3c98718c65230d38489ba73e943d6a05de959c43d3fd616b2abf1e","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51168","feedbackHash":"8244dc17f63c40bc3d55c6a5cb4a1079a0112e940e6edff683fd116276881bde","nodeKey":"audit_math","submissionHash":"bf21e8a90ca6650698348328c48efcf40b653ef061c11bbdb3ca7c952942db41","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51566","feedbackHash":"99a9941eb379af0dc361dba93b67e12ae63fee88f478fc019cabb55e1d42c7d3","nodeKey":"audit_permissions","submissionHash":"ea37fb9ab4e888c9b83f64857a88c7c24411f4462b97cbab33a1e11715d4945e","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"53911","feedbackHash":"99c159892c398f2b8f9808c45aa1ffa15cb196bdc4f67bb54bf87ae05302c1fc","nodeKey":"manifest","submissionHash":"6ad4ce2c949a6d169f150f1c5673e8da5e64166d912c3a099bd4e44dc819aea4","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51380","feedbackHash":"9a2ef00368b41689bb7b56da9c142c32c7eed74bd542ea9529c88a6492cf5f9b","nodeKey":"write_foundry_tests","submissionHash":"5029c2676782267de6d24e23d69a1a1145fecb284b26c4c58cda19c2156ceda2","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"2b961e8951ef7edbd018e7b4b7bc2b338e4f429c2ad3916fa83d4a7564c04239","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"03332db135fe4c15","findings":[{"citation":"resolved","description":"Economic Security / Invariant: when `abandon` closes a round, the tip that was taken from the meter at `request` is added back to `m.balance` without minting shares, so it is shared pro rata by whoever holds meter shares at closing time, not by the funders whose IMD paid it. Anyone can see a round that is about to be closable (the 30-minute wait after `CompletionSeen`, or the 36 h 5 min 1 s silence deadline of the house feeds), fund a large amount with `fund`, call `abandon`, and `defund` in the same transaction, taking almost the whole returned tip from the earlier funders. On the house feeds the earlier funder is Payroll (its `fundFeeds` position) or the launch wallet, so the loss comes out of the 20% feed budget. The gain is bounded by one feed tip (0.05 IMD) per failed round and the attacker cannot profitably force a failure (an unserved request costs 0.5 IMD), so this is a bounded leak, not a drain. The authors document it as THREATS.md Q5 and left it; it is recorded here so the judge has the concrete numbers and can decide whether a fix (minting shares for the returned tip to the round's funders, or crediting the tip to the position that paid it) is wanted.","line":1306,"path":"src/questions/Questions.sol","proof":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.26;\n\nimport {Test} from \"forge-std/Test.sol\";\nimport {ERC20} from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\nimport {IERC20} from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport {Questions} from \"src/questions/Questions.sol\";\nimport {IIntake} from \"src/interfaces/external/IIntake.sol\";\n\ncontract ScratchIMD is ERC20 {\n    constructor() ERC20(\"IMD\", \"IMD\") {}\n    function mint(address to, uint256 amount) external { _mint(to, amount); }\n}\n\n/// @dev The least an Intake must do for `request`: sell one action, pull the price, hand back an id.\ncontract ScratchIntake {\n    uint256 public price;\n    uint256 public nonce;\n    mapping(bytes32 => bool) public done;\n    address immutable imd;\n    constructor(address imd_, uint256 price_) { imd = imd_; price = price_; }\n    function priceOf(bytes32, address) external view returns (uint256) { return price; }\n    function request(bytes32, bytes calldata, IIntake.Callback calldata, address asset, uint256 amount)\n        external payable returns (bytes32 id)\n    {\n        require(asset == imd && amount == price, \"price\");\n        IERC20(asset).transferFrom(msg.sender, address(this), amount);\n        id = keccak256(abi.encode(++nonce));\n    }\n    function requests(bytes32) external pure returns (address, address, bytes4, bool) {\n        return (address(0), address(0), bytes4(0), false);\n    }\n}\n\ncontract ReturnedTipCaptureTest is Test {\n    ScratchIMD imd;\n    ScratchIntake intake;\n    Questions q;\n    bytes32 feed;\n    address funder = makeAddr(\"funder\");\n    address keeper = makeAddr(\"keeper\");\n    address attacker = makeAddr(\"attacker\");\n\n    function setUp() public {\n        vm.warp(1_800_000_000);\n        vm.roll(26_000_000);\n        imd = new ScratchIMD();\n        intake = new ScratchIntake(address(imd), 0.5e18);\n        q = new Questions(address(intake), address(imd), makeAddr(\"signer\"));\n\n        Questions.FeedParams memory p = Questions.FeedParams({\n            action: bytes32(\"oracle.request@oracle-1\"),\n            chainId: uint64(block.chainid),\n            answerType: 3,\n            panelSize: 7,\n            quorum: 5,\n            minAgreed: 5,\n            validFor: 86_400,\n            cadenceBlocks: 7_000,\n            maxWindowBlocks: 21_600,\n            lagBlocks: 12,\n            contiguous: true,\n            pinHash: true,\n            maxPrice: 2e18,\n            tip: 0.05e18,\n            gateCmp: 0,\n            gateTarget: address(0),\n            gateThreshold: 0,\n            gateData: \"\"\n        });\n        bytes memory prefix = bytes.concat(\n            '{\"answerType\":\"uint256\",\"chainId\":', bytes(vm.toString(block.chainid)),\n            ',\"question\":\"how much?\",\"v\":1,\"window\":{\"fromBlock\":'\n        );\n        bytes memory tail = ',\"panelSize\":7,\"quorum\":5,\"validForSeconds\":86400}';\n        feed = q.createFeed(p, prefix, tail);\n\n        imd.mint(funder, 7.7e18);\n        imd.mint(attacker, 100e18);\n        vm.startPrank(funder);\n        imd.approve(address(q), type(uint256).max);\n        q.fund(feed, 7.7e18);\n        vm.stopPrank();\n    }\n\n    function test_lateFunderTakesTheReturnedTip() public {\n        vm.prank(keeper);\n        q.request(feed);\n        (uint256 bal, uint256 shares) = q.meterOf(feed);\n        assertEq(bal, 7.15e18);\n        assertEq(shares, 7.7e18);\n\n        // Silence deadline of the house feeds: 12 h + validFor + 5 min + 1 s.\n        vm.warp(block.timestamp + 12 hours + 86_400 + 5 minutes + 1);\n\n        vm.startPrank(attacker);\n        imd.approve(address(q), type(uint256).max);\n        q.fund(feed, 100e18);\n        assertTrue(q.abandon(feed));\n        uint256 got = q.defund(feed, type(uint256).max);\n        vm.stopPrank();\n\n        emit log_named_uint(\"attacker got back\", got);\n        emit log_named_uint(\"funder redeemable\", q.redeemable(feed, funder));\n        // Expected: the attacker gets exactly its 100e18 back and the funder's position is 7.2e18.\n        assertEq(got, 100e18, \"late funder took part of the returned tip\");\n        assertEq(q.redeemable(feed, funder), 7.2e18, \"first funder lost part of the returned tip\");\n    }\n}","reproduction":"Feed: price 0.5e18, tip 0.05e18 (house feed values). 1) Payroll/launch wallet `fund(feed, 7.7e18)`: balance 7.7e18, totalShares 7.7e18. 2) Keeper `request(feed)`: balance 7.15e18 (price+tip leave), totalShares 7.7e18, held.tip 0.05e18. 3) No answer. At requestedAt + 36h5m1s (or 30 min after a `CompletionSeen`), attacker in one tx: `fund(feed, 100e18)` -> shares = 100e18*7.7e18/7.15e18 = 107.6923e18, totalShares 115.3923e18, balance 107.15e18; `abandon(feed)` -> `_returnTip`: balance 107.2e18, totalShares unchanged; `defund(feed, type(uint256).max)` -> 107.6923e18*107.2e18/115.3923e18 = 100.0466e18. Expected: attacker gets back exactly 100e18 and the 0.05e18 tip returns to the position that paid it (7.2e18 redeemable for the first funder). Actual (test/scratch/ReturnedTipCapture.t.sol, run on this tree): attacker's `defund` returns 100046663555762949136 (+0.04666 IMD, 93% of the 0.05 IMD tip) and the first funder's `redeemable` is 7153336444237050864 instead of 7.2e18.","severity":"low","snippet":"        uint256 balance = uint256(m.balance) + h.tip;\n        m.balance = balance.toUint128();\n        if (m.totalShares < balance) m.totalShares = balance;\n        totalMetered += h.tip;","title":"A returned keeper tip is captured by whoever funds the meter while the round is pending (Questions._returnTip mints no shares)"}],"hash":"23f94c1d2b9ab402d97b19f8d2cb96d69a0985e716672c1b597f7065018ed8f9","nodeId":"4c39acb0-3f76-409d-bd90-16b161d15134","outcome":"completed","summary":"The review is complete and the findings file is in place. Nothing in the repository was modified apart from the findings file and the scratch test, which the harness discards.\n\n**Result: one low finding, no critical, high or medium defects in the economics.**\n\nThe one substantiated defect is in how Questions gives a failed round's keeper tip back to the meter. The tip is added to the meter balance without minting shares, so it is shared by whoever holds shares at closing time, not by the funders whose IMD paid it. Anyone who sees a round become closable can fund, abandon and defund in one transaction and take most of the tip. The scratch test confirms the numbers on this tree:\n\n| Party | Expected | Actual |\n| --- | --- | --- |\n| Late funder's defund return | 100 IMD | 100.04666 IMD |\n| First funder's redeemable | 7.2 IMD | 7.15334 IMD |\n\nThe gain is bounded by one tip per failed round, and forcing a failure costs more than the tip, so I rated it low. The authors document it as THREATS.md Q5 and left it unfixed. I reported it so the judge has the exact sequence and can decide.\n\n**What I covered in depth.** All 22 entry points have a coverage row. I traced the Payroll ledger conservation laws through every writer, the stream re-levelling and drip cap math including the \"cannot be rushed\" bound, the fortnight ageing of the feed budget and the audit 1.1 fix ordering, the tip ageing tranches across one and two period gaps, the Questions meter share accounting including rescale and epoch retirement, and the tip escrow path through request, settle, abandon and collect. I confirmed against mainnet that the seat token has exactly 2000 ids 0 to 1999. The project's own Payroll invariant suite passed in this review at reduced run counts.\n\n**What I did not reach.** I did not run the fork suite or the full Questions invariant suite, since the full via-IR test build exceeds the time budget. I did not review the Jobs Report beyond confirming it moves no value, and I did not examine the memory-safety claim in the Payroll binding read, which is outside my area.","treeHash":null,"usage":{"cachedInputTokens":2596204,"inputTokens":482,"model":"claude-fable-5-1","outputTokens":41904,"runtime":"claude","turns":31,"wallClockMs":1284822}},{"artifacts":[],"attempt":1,"bundleHash":"a3c1faeeedd02315f22454162d4a234919e40bb220305a55d34c9390714a4f2d","device":"2d33950b9728fd89","findings":[],"hash":"4792cda19312782eb6de7aa23cae5c41a447559f40bde37e500f64e4d8a3cddf","nodeId":"8bd93d23-3dd6-48cf-84f4-6d894afff276","outcome":"completed","summary":"Implemented opener-tip protection, extended oracle timeout grace, and protection against forced escrow payouts.\n\n`forge build` passes. All 503 local tests pass.\n\n[ADAPTATION.md](/home/imd3/.identitymd/work/d8bb3d81-820d-42f4-ad7c-1d3ed96b1da8/8bd93d23-3dd6-48cf-84f4-6d894afff276/ADAPTATION.md) documents changes and remaining signer/timing limitations. Prepared for IdentityMD’s deployment stage; no broadcast performed.","treeHash":"1679d62b3a8c02f5c648a9cd70143701a514c540","usage":{"cachedInputTokens":6792064,"inputTokens":386056,"model":"gpt-6-astra","outputTokens":44661,"runtime":"codex","turns":13,"wallClockMs":2042862}},{"artifacts":[],"attempt":1,"bundleHash":"3354c40562488e414c331c893c0283c4728f6a19a6c02eb6d9b06a3f0f382071","device":"f7cb61cceaa27e78","findings":[],"hash":"5029c2676782267de6d24e23d69a1a1145fecb284b26c4c58cda19c2156ceda2","nodeId":"60e80acc-bee5-41cd-8e0a-27a4631fcd65","outcome":"completed","summary":"Added 11 failure-path and reentrancy tests, plus cross-contract lifecycle invariants covering 24,576 randomized calls.\n\n`forge build` passed. `forge test`: **515 passed, 0 failed**.\n\nAll changes are under `test/`.","treeHash":"8421ffdec17da6b673eb907553b41b29cc43c88c","usage":{"cachedInputTokens":4312192,"inputTokens":201831,"model":"gpt-6-astra","outputTokens":31607,"runtime":"codex","turns":9,"wallClockMs":1432087}},{"artifacts":[],"attempt":1,"bundleHash":"57661cdce0db1d1d55d5d6ff5f325ad7e7dbeff1207eb1e11bbb3a3223a682fd","device":"0eca5d6d7ad6ddb4","findings":[],"hash":"6ad4ce2c949a6d169f150f1c5673e8da5e64166d912c3a099bd4e44dc819aea4","nodeId":"f0e2a42a-75f5-438f-ae02-a0e7add12560","outcome":"completed","summary":"Created [launch.json](/home/imd/.identitymd-5/work/d8bb3d81-820d-42f4-ad7c-1d3ed96b1da8/f0e2a42a-75f5-438f-ae02-a0e7add12560/launch.json) exactly as requested, with constructor arguments verified against the compiled ABIs.\n\n- `forge build`: passed.\n- `forge test`: 502 passed, 0 failed.\n- Only `launch.json` changed.","treeHash":"a068025a6b59a5124fe463933667c6183dbb4d5e","usage":{"cachedInputTokens":571520,"inputTokens":47473,"model":"gpt-6-astra","outputTokens":3600,"runtime":"codex","turns":5,"wallClockMs":256131}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"8e25456c4ae69acf","findings":[{"citation":"resolved","description":"Merged from the economics specialist (THREATS.md Q5, disclosed and left open by the authors). `request` takes the feed's tip out of the meter balance without burning shares; when `abandon` closes the round, `_returnTip` adds the tip back to `m.balance` without minting shares. The tip is therefore distributed pro rata to whoever holds shares at closing time, not to the funders whose IMD paid it. Closable rounds are visible on chain (`canAbandon`), and `fund`, `abandon` and `defund` fit in one transaction, so a late funder with a deposit much larger than the meter takes almost the whole returned tip from the earlier funders. On the house feeds the earlier funder is Payroll's own position (its 20% feed budget) or the launch wallet. The leak is bounded by one feed tip (0.05 IMD) per failed round, and forcing a failure costs more than that (0.5 IMD per unserved request), so it is a bounded value transfer, not a drain. Reproduced on this tree with the attached proof; the authors' own fix options (mint shares for the returned tip to the round's funders, or credit the tip to the position that paid it) are the natural remedies if one is wanted.","line":1306,"path":"src/questions/Questions.sol","proof":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.26;\n\nimport {Test} from \"forge-std/Test.sol\";\nimport {ERC20} from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\nimport {IERC20} from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport {Questions} from \"src/questions/Questions.sol\";\nimport {IIntake} from \"src/interfaces/external/IIntake.sol\";\n\ncontract ScratchIMD is ERC20 {\n    constructor() ERC20(\"IMD\", \"IMD\") {}\n    function mint(address to, uint256 amount) external { _mint(to, amount); }\n}\n\n/// @dev The least an Intake must do for `request`: sell one action, pull the price, hand back an id.\ncontract ScratchIntake {\n    uint256 public price;\n    uint256 public nonce;\n    mapping(bytes32 => bool) public done;\n    address immutable imd;\n    constructor(address imd_, uint256 price_) { imd = imd_; price = price_; }\n    function priceOf(bytes32, address) external view returns (uint256) { return price; }\n    function request(bytes32, bytes calldata, IIntake.Callback calldata, address asset, uint256 amount)\n        external payable returns (bytes32 id)\n    {\n        require(asset == imd && amount == price, \"price\");\n        IERC20(asset).transferFrom(msg.sender, address(this), amount);\n        id = keccak256(abi.encode(++nonce));\n    }\n    function requests(bytes32) external pure returns (address, address, bytes4, bool) {\n        return (address(0), address(0), bytes4(0), false);\n    }\n}\n\ncontract ReturnedTipCaptureTest is Test {\n    ScratchIMD imd;\n    ScratchIntake intake;\n    Questions q;\n    bytes32 feed;\n    address funder = makeAddr(\"funder\");\n    address keeper = makeAddr(\"keeper\");\n    address attacker = makeAddr(\"attacker\");\n\n    function setUp() public {\n        vm.warp(1_800_000_000);\n        vm.roll(26_000_000);\n        imd = new ScratchIMD();\n        intake = new ScratchIntake(address(imd), 0.5e18);\n        q = new Questions(address(intake), address(imd), makeAddr(\"signer\"));\n\n        Questions.FeedParams memory p = Questions.FeedParams({\n            action: bytes32(\"oracle.request@oracle-1\"),\n            chainId: uint64(block.chainid),\n            answerType: 3,\n            panelSize: 7,\n            quorum: 5,\n            minAgreed: 5,\n            validFor: 86_400,\n            cadenceBlocks: 7_000,\n            maxWindowBlocks: 21_600,\n            lagBlocks: 12,\n            contiguous: true,\n            pinHash: true,\n            maxPrice: 2e18,\n            tip: 0.05e18,\n            gateCmp: 0,\n            gateTarget: address(0),\n            gateThreshold: 0,\n            gateData: \"\"\n        });\n        bytes memory prefix = bytes.concat(\n            '{\"answerType\":\"uint256\",\"chainId\":', bytes(vm.toString(block.chainid)),\n            ',\"question\":\"how much?\",\"v\":1,\"window\":{\"fromBlock\":'\n        );\n        bytes memory tail = ',\"panelSize\":7,\"quorum\":5,\"validForSeconds\":86400}';\n        feed = q.createFeed(p, prefix, tail);\n\n        imd.mint(funder, 7.7e18);\n        imd.mint(attacker, 100e18);\n        vm.startPrank(funder);\n        imd.approve(address(q), type(uint256).max);\n        q.fund(feed, 7.7e18);\n        vm.stopPrank();\n    }\n\n    function test_lateFunderTakesTheReturnedTip() public {\n        vm.prank(keeper);\n        q.request(feed);\n        (uint256 bal, uint256 shares) = q.meterOf(feed);\n        assertEq(bal, 7.15e18);\n        assertEq(shares, 7.7e18);\n\n        // Silence deadline of the house feeds: 12 h + validFor + 5 min + 1 s.\n        vm.warp(block.timestamp + 12 hours + 86_400 + 5 minutes + 1);\n\n        vm.startPrank(attacker);\n        imd.approve(address(q), type(uint256).max);\n        q.fund(feed, 100e18);\n        assertTrue(q.abandon(feed));\n        uint256 got = q.defund(feed, type(uint256).max);\n        vm.stopPrank();\n\n        emit log_named_uint(\"attacker got back\", got);\n        emit log_named_uint(\"funder redeemable\", q.redeemable(feed, funder));\n        // Expected: the attacker gets exactly its 100e18 back and the funder's position is 7.2e18.\n        assertEq(got, 100e18, \"late funder took part of the returned tip\");\n        assertEq(q.redeemable(feed, funder), 7.2e18, \"first funder lost part of the returned tip\");\n    }\n}","reproduction":"House-feed values: price 0.5e18, tip 0.05e18. (1) funder: fund(feed, 7.7e18) -> balance 7.7e18, totalShares 7.7e18. (2) keeper: request(feed) -> balance 7.15e18, totalShares 7.7e18, held.tip 0.05e18. (3) no answer; warp to requestedAt + 12h + 86400 + 5min + 1s (the silence deadline). (4) attacker in one transaction: fund(feed, 100e18) -> shares = 100e18*7.7e18/7.15e18 = 107.6923e18, balance 107.15e18; abandon(feed) returns true and _returnTip makes balance 107.2e18 with totalShares unchanged; defund(feed, type(uint256).max). Expected: attacker receives exactly 100e18 and redeemable(feed, funder) is 7.2e18 (its 7.15e18 plus the whole returned tip). Actual (forge test on this tree, test/scratch/Proof_94a6f6b20d35.t.sol): attacker receives 100046663555762949136 (+0.04666 IMD, 93% of the tip) and redeemable(feed, funder) is 7153336444237050864.","severity":"low","snippet":"        uint256 balance = uint256(m.balance) + h.tip;","title":"A returned keeper tip is shared by whoever holds meter shares when the round is closed, so a funder arriving while the round is pending captures the tip earlier funders paid (Questions._returnTip mint"},{"citation":"resolved","description":"Merged from the math specialist. The doc comment at line 684 says `Reverts only when the caller holds no shares of this meter`, but the check runs on the clamped `shares` argument, so a holder that passes 0 is refused with the error that names a holder of nothing. No value is at risk and no state changes; an integrator that keys error handling on NothingToDefund, or sizes a partial withdrawal to a rounded zero, misreads the result. Either treat zero as a no-op returning 0 (as pay(0) and tip(.., 0) do elsewhere in the project) or correct the comment.","line":690,"path":"src/questions/Questions.sol","reproduction":"Questions with any existing feed F. alice: imd.approve(q, 1e18); q.fund(F, 1e18) -> sharesOf(F, alice) == 1e18. alice: q.defund(F, 0). Expected per the doc comment: not NothingToDefund (a no-op or a dedicated zero-amount error). Actual: reverts NothingToDefund(). Reproduced on this tree in test/scratch/DefundZero.t.sol (vm.expectRevert(Questions.NothingToDefund.selector) passes).","severity":"info","snippet":"        if (shares == 0) revert NothingToDefund();","title":"defund(feedId, 0) by a share holder reverts NothingToDefund, contrary to the doc comment that it reverts only when the caller holds no shares"}],"hash":"8612964a2d3c98718c65230d38489ba73e943d6a05de959c43d3fd616b2abf1e","nodeId":"f8480322-a633-4cd2-b94c-e13a75f5d9d1","outcome":"completed","summary":"The review is complete and written to `.imd-findings.json` with two findings and a full coverage record. Git reports no tracked changes, since the findings file is ignored and `test/scratch/` is mine.\n\n**What I kept from the panel**\n\n- **Low, returned tip capture.** When `abandon` closes a round, `_returnTip` adds the keeper tip back to the meter balance without minting shares. A funder who deposits while the round is pending, calls `abandon`, and defunds in one transaction takes almost the whole returned tip from the earlier funders, which on the house feeds is Payroll's own feed budget. I ran the specialist's proof on this tree and it fails exactly as stated. The attacker gets back 0.0467 IMD more than it deposited out of a 0.05 IMD tip. The loss is bounded by one tip per failed round, and forcing a failure costs more than the tip, so it stays low. The proof travels with the finding.\n- **Info, zero-share defund.** A holder calling `defund(feed, 0)` is refused with `NothingToDefund`, which contradicts the doc comment two lines above. Reproduced with a scratch test. No value at risk.\n\n**What I verified myself and found sound**\n\n- All 21 entry points traced and marked `holds`, except `abandon` and `defund`, which point at the two findings. One extra row covers the manifest and constructors.\n- The Intake's verified source on Sourcify confirms the `requests` struct layout the abandon path indexes, and that `complete` marks completion before the 200,000 gas callback.\n- All six mainnet dependency addresses hold code and answer as the design expects. IMD is a plain OpenZeppelin ERC20 with LayerZero bridging and no transfer hooks.\n- The manifest matches the constructors in order and count, uses only backward references, and the compiled sizes are well inside the protocol limits.\n\n**Two environment notes.** The full test suite cannot be built on this machine because the cgroup caps memory at 1.5 GB and the via-IR compile of 119 files is killed. The sources and my scratch tests compile fine with the heavy test directories skipped. I did not run the project's own suites, so the independent tester's clean result is not something I re-executed.","treeHash":null,"usage":{"cachedInputTokens":1936362,"inputTokens":354,"model":"claude-fable-5-1","outputTokens":51805,"runtime":"claude","turns":31,"wallClockMs":802627}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"6208734cdf5317a1","findings":[{"citation":"resolved","description":"Zero-input boundary (Boundary guide, step 2.3). The doc comment two lines above says `Reverts only when the caller holds no shares of this meter`, but the check runs on the clamped `shares` argument, so a holder who passes 0 is refused with the error that names a holder of nothing. No value is at risk: the call reverts, no state changes. A caller that computes a share count of zero (an integrator sizing a partial withdrawal by a rounded figure) cannot distinguish `I asked for nothing` from `I own nothing`, and an error-handling branch keyed on NothingToDefund misreads it. Either accept zero as a no-op returning 0 (consistent with `pay(0)` and `tip(.., 0)` elsewhere in the project, which return instead of reverting), or correct the comment to say that a zero request is refused too.","line":690,"path":"src/questions/Questions.sol","reproduction":"Questions q with any existing feed id F. alice: imd.approve(q, 1e18); q.fund(F, 1e18) -> sharesOf(F, alice) == 1e18. alice: q.defund(F, 0). Expected (per the doc comment at line 684): a holder is never refused with NothingToDefund; a no-op or a documented ZeroAmount. Actual: reverts NothingToDefund(). Reproduced in test/scratch/MathEdges.t.sol, contract DefundZeroScratch, test_defund_zeroSharesByAHolderReverts (passes on this tree, i.e. the revert happens).","severity":"info","snippet":"        if (shares == 0) revert NothingToDefund();","title":"defund(feedId, 0) by a share holder reverts NothingToDefund, contrary to the doc comment"}],"hash":"bf21e8a90ca6650698348328c48efcf40b653ef061c11bbdb3ca7c952942db41","nodeId":"ff52b27c-c17b-4859-ab07-f1c69539941a","outcome":"completed","summary":"The review is complete and the findings file is in place. Nothing I need next; here is the recap.\n\n**Outcome.** The math in the assigned area holds. I found no reproducible precision, boundary or numerical-gap defect that moves value, and one informational boundary mismatch. The findings file holds that one item plus a coverage row for every listed entry point.\n\n**What I checked, against the three guides**\n\n- **Meter share pool** in Questions. Deposits round shares down, withdrawals round assets down, and the rescale loop keeps `totalShares ≥ balance` so no share is ever worth more than one wei. I traced the sum bound (`total + shares < 2^256` after a rescale) and confirmed the ZeroShares revert is unreachable for any non-zero deposit. A scratch fuzz ran fund, request, defund-while-pending, refill-from-zero, abandon with tip return, and defund-all, and the invariants held every run.\n- **Payroll top-up sizing.** The `lacking > 1` threshold in the shortfall is exact. A top-up through the share pool leaves Payroll's position at most one wei short, so a second call places nothing. Fuzzed over costs from 1 wei to 5 IMD with partial spends in between.\n- **Stream re-levelling and drip cap.** The weighted-average end never moves earlier than the old end and dust bookings move it by exactly nothing while at least 604,800 wei are unvested. The cap never falls below 1/168 of what is outstanding, so a backlog is always drainable. Fuzzed.\n- **Feed budget ageing.** The tranche invariant `due + old ≤ budget` survives spending, the post-call correction, and the release.\n- **Tip tranches, seat pool carry, the 50/30/20 split, JobsReport pairing and the bytes decoder in `crown`.** All divisions have non-zero divisors by construction, every narrowing cast is bounded first, and no intermediate product can overflow at IMD scale.\n\n**The one finding (info).** A holder calling `defund(feedId, 0)` is refused with `NothingToDefund`, while the doc comment says that error is only for callers who hold no shares. No value is at risk. The reproduction is in the scratch test and recorded in the file.\n\n**Static-analysis leads.** The flagged divide-before-multiply in `tip` is the intended remainder. The weak-PRNG line is a modulo for bookkeeping. The strict equalities compare amounts with zero or period counters, not token balances. None reproduced as a defect.\n\n**Verification.** The project's own math-related suites, 304 tests across Payroll, Questions and JobsReport, pass on this tree. The fork tests were not run because there is no network. No tracked file was modified; only `.imd-findings.json` and `test/scratch/MathEdges.t.sol` were written.","treeHash":null,"usage":{"cachedInputTokens":2951839,"inputTokens":548,"model":"claude-fable-5-1","outputTokens":48349,"runtime":"claude","turns":29,"wallClockMs":1091411}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"bf4c5b8707945096","findings":[],"hash":"cbebedb957677cd6d51cc0fd3548ab3eeb96773a9d87b5d78fe44e17f8e05255","nodeId":"48c788da-f920-4136-9d8a-f3bf9988dd02","outcome":"completed","summary":"I found no defects I could reproduce in the control-flow area, so `.imd-findings.json` has an empty findings list. Its coverage record has 24 rows: all 21 listed entry points, two balance invariants and the launch manifest's constructor arguments. Every row is marked `holds` with a one-line reason. No other file was changed.\n\n**What I covered**\n- **Execution trace:** I traced each entry point in `Questions`, `Payroll` and `JobsReport` from its checks through state changes to failure paths. That included:\n  - leftover token approvals after the Intake and meter top-up calls (none are left);\n  - partial updates around those external calls;\n  - how `request`, the answer callback, `submit` and `abandon` interleave;\n  - whether a caller can send too little gas to fake a result from the Intake, seat token or seat Adapter reads (they can't);\n  - the fortnight ageing of the feed budget and its release to stakers;\n  - how `JobsReport` pairs payment counts with prints.\n- **Periphery:** I checked the `QuestionBody` text helpers, the small assembly helpers that read one word from another contract, the Adapter read, and the attestation check (window, then signature).\n- **First principles:**\n  - Each feed meter's share value never goes above one wei.\n  - `Questions` always holds at least what its meters and tips add up to.\n  - `Payroll`'s ledger always balances.\n  - The staker stream can always be fully sent out.\n  - The feed budget only goes to stakers after the meters were served.\n\n**Static-analysis leads:** None held up. The strict-equality lines all compare with zero or between counters. The \"weak PRNG\" line is a remainder carried to the next seat payout. The reentrancy lines are covered by each contract's transient lock and by `Payroll` writing its books before calling `Questions`. The ignored return values are timestamps nothing uses. The flagged casts are each bounded on the line before.\n\n**Launch inputs, read live from mainnet:**\n- sIMD's `asset()` is IMD, and it has shares outstanding.\n- The seat token has 2,000 seats numbered 0–1,999; `ownerOf(2000)` reverts. This matches `SEAT_COUNT` and the \"number 2000\" constructor argument.\n- The Intake (version 2) charges 0.5 IMD, under the house feeds' 2 IMD cap.\n- The three feed ids are the same in the manifest, the fixtures, `JobsReport` and `Payroll`, and the arguments are in constructor order.\n\nThe whole non-fork test suite passes. I did not run the fork tests. The callback's 200,000-gas limit and the Intake's `requests()` layout are already tested in `QuestionsCallbackGas.t.sol` and `QuestionsIntake.fork.t.sol`, so I relied on those.\n\n**Known risks, already disclosed in the code's comments:**\n- Someone who buys an Intake request earlier in the same transaction can make a round fail. The employers feed can only be answered through the Intake callback, so it is the most exposed.\n- A returned tip can end up owned by nobody after a meter was refilled from zero.\n- Payouts to sIMD stakers have no time weighting, so a short-term staker can take a share of a drip.","treeHash":null,"usage":{"cachedInputTokens":2354083,"inputTokens":38,"model":"claude-opus-5-5","outputTokens":36385,"runtime":"claude","turns":22,"wallClockMs":569318}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"f91c213c19ee44bb","findings":[{"citation":"resolved","description":"`request` sets the feed's tip aside for the caller (the keeper that paid gas and opened the round). The tip is credited only when the round is answered, and `_settle` credits it to `earner`, which is `msg.sender` of `submit`. `submit` opens for any pinned, chain-evidence feed when `block.timestamp >= requestedAt + SUBMIT_AFTER_SILENCE` (30 minutes) even though the Intake has not completed the request. The oracle signs within minutes and publishes the attestation and signature through its API, so after 30 minutes anyone can copy that attestation into `submit` and be paid the tip that was set aside for the keeper. docs/LAUNCH.md section 4 records that the Intake's writer has been seen to take more than four hours to deliver, so on such days the opener loses the tip on every round to whoever runs a bot against the oracle API. The keeper incentive the tip is meant to provide is therefore unreliable, and the opener's `request` gas is uncompensated. This is disclosed in the contract notice and in LAUNCH.md as a limit; it is reported so the adapter can decide whether the opener should keep the tip (or a share) when `submit` is used, e.g. by crediting `h.keeper` instead of `earner` when the submitted attestation answers the round's own request, or by paying the opener a fixed part.","line":1372,"path":"src/questions/Questions.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 {ERC20} from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\nimport {Questions} from \"src/questions/Questions.sol\";\nimport {OracleAttestation} from \"src/questions/OracleAttestation.sol\";\n\ncontract ScratchIMD is ERC20 {\n    constructor() ERC20(\"IMD\", \"IMD\") {}\n    function mint(address to, uint256 a) external { _mint(to, a); }\n}\n\n/// Minimal Intake: sells the action, pulls the price, never completes.\ncontract ScratchIntake {\n    struct Callback { address target; bytes4 selector; }\n    struct Request { address payer; address callbackTarget; bytes4 callbackSelector; bool completed; }\n    mapping(bytes32 => mapping(address => uint256)) public priceOf;\n    mapping(bytes32 => Request) public requests;\n    uint256 public nonce;\n    address public payTo = address(0xBEEF);\n    function setPrice(bytes32 action, address asset, uint256 p) external { priceOf[action][asset] = p; }\n    function request(bytes32 action, bytes calldata, Callback calldata cb, address asset, uint256 amount)\n        external payable returns (bytes32 id)\n    {\n        require(amount >= priceOf[action][asset] && priceOf[action][asset] != 0, \"price\");\n        id = keccak256(abi.encode(address(this), ++nonce));\n        requests[id] = Request(msg.sender, cb.target, cb.selector, false);\n        IERC20(asset).transferFrom(msg.sender, payTo, amount);\n    }\n}\n\ncontract TipSnipeTest is Test {\n    bytes32 constant ACTION = bytes32(\"oracle.request@oracle-1\");\n    ScratchIMD imd;\n    ScratchIntake intake;\n    Questions q;\n    uint256 oracleKey = 0xA11CE;\n    address keeper = makeAddr(\"keeper\");\n    address bot = makeAddr(\"bot\");\n\n    function setUp() public {\n        vm.chainId(1);\n        vm.roll(26_200_000);\n        vm.warp(1_791_600_000);\n        imd = new ScratchIMD();\n        intake = new ScratchIntake();\n        intake.setPrice(ACTION, address(imd), 0.5e18);\n        q = new Questions(address(intake), address(imd), vm.addr(oracleKey));\n    }\n\n    function _params() internal pure returns (Questions.FeedParams memory p) {\n        p.action = ACTION; p.chainId = 1; p.answerType = 3; p.panelSize = 7; p.quorum = 5; p.minAgreed = 5;\n        p.validFor = 86400; p.cadenceBlocks = 7000; p.maxWindowBlocks = 21600; p.lagBlocks = 12;\n        p.contiguous = true; p.pinHash = true; p.maxPrice = 2e18; p.tip = 0.05e18;\n    }\n\n    function test_botTakesOpenersTipAfterThirtyMinutes() public {\n        bytes memory prefix = bytes('{\"answerType\":\"uint256\",\"chainId\":1,\"question\":\"q\",\"v\":1,\"window\":{\"fromBlock\":');\n        bytes memory tail = bytes(',\"panelSize\":7,\"quorum\":5,\"validForSeconds\":86400}');\n        bytes32 feedId = q.createFeed(_params(), prefix, tail);\n        imd.mint(address(this), 10e18);\n        imd.approve(address(q), 10e18);\n        q.fund(feedId, 10e18);\n\n        vm.prank(keeper);\n        q.request(feedId);\n        (uint256 earnedK, uint256 pendingK) = q.tipsOf(keeper);\n        assertEq(earnedK, 0); assertEq(pendingK, 0.05e18);\n\n        (, bytes32 qh, bytes32 bh,) = q.roundRequest(feedId, 1);\n        (,,, uint64 from, uint64 to,) = _round(feedId);\n        OracleAttestation.Attestation memory a = OracleAttestation.Attestation({\n            requestId: bytes32(uint256(1)), chainId: 1, questionHash: qh, answerType: 3,\n            answer: abi.encode(uint256(114e18)), figure: 0, fromBlock: from, toBlock: to, blockHash: bh,\n            panelJobId: bytes32(uint256(2)), panelSize: 7, quorum: 5, agreed: 5,\n            issuedAt: uint64(block.timestamp), expiresAt: uint64(block.timestamp + 86400)\n        });\n        bytes32 digest = q.attestationDigest(a);\n        (uint8 v, bytes32 r, bytes32 s) = vm.sign(oracleKey, digest);\n        bytes memory sig = abi.encodePacked(r, s, v);\n\n        vm.warp(block.timestamp + 30 minutes);\n        vm.prank(bot);\n        q.submit(feedId, a, sig);\n\n        (uint256 earnedB,) = q.tipsOf(bot);\n        (earnedK, pendingK) = q.tipsOf(keeper);\n        // The opener, whose request produced this answer, is expected to keep the tip it was set aside for.\n        assertEq(earnedK, 0.05e18, \"opener lost its tip\");\n        assertEq(earnedB, 0, \"bot earned the opener's tip\");\n    }\n\n    function _round(bytes32 feedId) internal view returns (uint8, uint256, uint64, uint64, uint64, uint64) {\n        (Questions.RoundStatus st, uint256 value, uint64 from, uint64 to, uint64 upd) = q.roundOf(feedId, 1);\n        return (uint8(st), value, 0, from, to, upd);\n    }\n}","reproduction":"State: Questions deployed with a MockIntake selling the action for 0.5 IMD; a pinned, chain-evidence feed with tip = 0.05 IMD is created and funded with 10 IMD. Steps: (1) keeper K calls `request(feedId)` at time t0; `tipsOf(K)` returns (earned 0, pending 0.05e18). (2) The oracle signs an attestation `a` for the round's window and question hash (signature public). (3) Nobody calls the Intake's `complete`. (4) At t0 + 30 minutes bot B calls `submit(feedId, a, sig)`. Actual: the round is Answered, `tipsOf(B)` = (0.05e18, 0), `tipsOf(K)` = (0, 0); K paid the request gas and gets nothing. Expected by a keeper: the tip of the round it opened and whose own request produced the answer.","severity":"low","snippet":"            _tips[earner == address(0) ? h.keeper : earner] += h.tip;","title":"submit lets any observer take the opener's keeper tip 30 minutes after a request, using the oracle's public attestation"},{"citation":"resolved","description":"`abandon` closes any pending round once `block.timestamp >= requestedAt + ABANDON_AFTER_SILENCE`, whatever the Intake says. Closing deletes `_feedOfRequest[requestId]`, so when the Intake's writer finally calls `complete` and the callback `onOracleResult` runs, it reverts `UnknownRequest` and the signed answer is dropped; the Intake records the request as completed and never retries. The round's price (0.5 IMD) is spent for nothing, `failStreak` rises and `_nextRequestBlock` doubles the cadence (up to 32x). For the employers feed (panel evidence) `submit` is refused, so there is no recovery path at all: a griefer who watches for rounds whose writer is late can call `abandon` at the 12-hour mark each time, for gas only, and the feed produces no crown and burns one price per round while backing off. For payrolls and hires the same griefing works whenever nobody hands the answer in through `submit` first. docs/LAUNCH.md section 4 says the writer has been seen to take more than four hours and lists this as limits Q3/Q4/Q8; it is reported so the adapter can weigh e.g. refusing `abandon` while `Intake.requests(id).completed` is false and the attestation would still be valid, or a longer silence for panel-evidence feeds.","line":439,"path":"src/questions/Questions.sol","reproduction":"State: Questions with a MockIntake; a panel-evidence feed (prefix holds \"evidence\":\"panel\", pinHash true) funded with 10 IMD. Steps: (1) keeper calls `request(feedId)` at t0, meter falls by 0.55 IMD, round 1 pending. (2) The Intake does not complete the request. (3) At t0 + 12 hours any address calls `abandon(feedId)`; it returns true, emits `RoundFailed(feedId, 1, id, false, 1)`, `roundOf(feedId,1).status == Failed`. (4) At t0 + 12 hours + 1 second the writer calls `MockIntake.complete(id, 0, …, abi.encode(id, a, sig))` with a valid attestation for the round's window. Actual: the callback reverts `UnknownRequest(id)` (recorded as not delivered), the 0.5 IMD price is gone, `canRequest` reports TooSoon until `lastRequestBlock + 2*cadence`. Expected: a valid answer that the Intake delivers while it is still inside its validity window is stored, or at least the round cannot be closed by a third party while the Intake still reports it uncompleted and the attestation window has not passed.","severity":"low","snippet":"    uint256 public constant ABANDON_AFTER_SILENCE = 12 hours;","title":"Anyone can close a round exactly 12 hours after its request while the Intake's delivery is still pending; the late answer is then refused, the price is lost and the cadence doubles"},{"citation":"resolved","description":"`oracleSigner` is set once in the constructor and Questions exposes no setter (by design: no owner). The pinned OpenZeppelin `SignatureChecker.isValidSignatureNowCalldata` takes the ECDSA path only when `signer.code.length == 0`; if the signer account ever has code (an EIP-7702 delegation designator is code) every verification goes to `isValidSignatureNow` through ERC-1271 and plain signatures stop verifying. Likewise if IdentityMD rotates the signer key, all attestations fail. Every round then fails after 12 hours, each costing its price, backing off to one request per ~31 days per daily feed; meters stay redeemable. The oracle-consumer reference says the signer should be owner-settable; the brief explicitly chose no owner and docs/DEVIATIONS.md records the trade-off. Not a defect against the brief; recorded as the main liveness assumption the adapter and the panel should carry forward.","line":162,"path":"src/questions/OracleAttestation.sol","reproduction":"State: Questions deployed with signer S (an EOA). Steps: (1) `vm.etch(S, hex\"ef0100\" ++ someAddress)` or any non-empty code, simulating a 7702 delegation, or sign with a rotated key S'. (2) Deliver a valid attestation signed by S's key through the Intake callback. Actual: `_verifyAttestation` reverts `BadSignature`, the callback is recorded as not delivered, the round can only be closed by `abandon` after 12 hours, and this repeats for every round of every feed. Expected under the reference design: an owner re-points the signer; under this design there is no remedy except redeploying all three contracts.","severity":"info","snippet":"        if (!SignatureChecker.isValidSignatureNowCalldata(oracleSigner, attestationDigest(a), signature)) {","title":"The oracle signer is fixed for good; an EIP-7702 delegation on the signer EOA or a signer rotation makes every answer fail BadSignature until the contract is relaunched"},{"citation":"resolved","description":"`claimSeat` reads `ownerOf(tokenId)` at call time and transfers the seat's whole accrued share to that address, and anyone may call it. While a seat sits in a contract that cannot forward ERC-20 balances (an escrow, an auction, a lending vault, a bridge), a third party can trigger the claim and the accrued IMD is paid to that contract and lost to the seat's economic owner. The same holds for `claimTip`, which pays the owner of the seat the agent is bound to. The contract notice documents this (\"Claim before moving a seat\"). Recorded so the adapter can decide whether to keep it; a pull-only design (owner claims, or a claim-to-owner-at-accrual snapshot) would remove the risk but changes the agreed keeper-friendly behaviour.","line":564,"path":"src/payroll/Payroll.sol","reproduction":"State: Payroll with 100 IMD booked (seat pool 30 IMD, 0.015 IMD per seat). Seat 7 is owned by Alice. Steps: (1) Alice lists seat 7 on a marketplace that holds the NFT in escrow (the escrow contract becomes `ownerOf(7)`). (2) Any address calls `claimSeat(7)`. Actual: `seatPaid[7]` is set to `seatAccrued`, `SeatClaimed(7, escrow, 0.015e18)` is emitted and 0.015 IMD is transferred to the escrow contract, which has no function to release it. Expected by Alice: her accrued share, claimable by her after the sale falls through or credited to the buyer.","severity":"info","snippet":"        IMD.safeTransfer(owner, paid);","title":"Permissionless claimSeat/claimSeats/claimTip pay whoever holds the seat at the moment of the call, including an escrow or marketplace contract"}],"hash":"e5b61ca2910b906d40562bce8ac8539527db197cc0cc2e686ab4a844ec09462f","nodeId":"8fd79169-459a-4921-8a32-5a9284d1a286","outcome":"completed","summary":"The review is complete and the findings file holds four substantiated items. Here is the recap.\n\n**Outcome.** No critical, high or medium defect was found in the three contracts as they arrived. The accounting of meters, tips, the staker stream, the seat pool and the feed budget held up under every path I traced, and the launch constraints in the brief are met. The four findings recorded in `.imd-findings.json` are two lows and two infos, all economic or liveness weaknesses that the authors already disclose in the code and in docs/LAUNCH.md. I report them so the adapter can make a conscious choice, not because they contradict the brief.\n\n**Findings**\n- **Low. Tip sniping through submit.** Thirty minutes after a request, anyone can hand in the oracle's public attestation and take the tip set aside for the keeper that opened the round. The attached Foundry test shows the bot earning 0.05 IMD and the opener earning nothing. It fails on the current code and passes once the opener is credited.\n- **Low. Twelve-hour abandon races a late writer.** Any address can close a pending round at twelve hours, after which the Intake's late callback reverts with an unknown request. The price is lost and the cadence doubles. The employers feed has no submit fallback, so a griefer paying only gas can keep it from ever producing a crown on days the writer is slow.\n- **Info. Fixed signer.** The pinned OpenZeppelin SignatureChecker takes the ERC-1271 path whenever the signer has code, so an EIP-7702 delegation or a key rotation makes every answer fail until all three contracts are relaunched. This is the brief's own no-owner choice.\n- **Info. Permissionless seat claims pay the current holder.** A seat held in escrow or on a marketplace can have its accrued share claimed into that contract by a third party.\n\n**What I checked and how**\n- Read in full: Questions, Payroll, JobsReport, OracleAttestation, QuestionBody, the three internal interfaces, the two external interfaces, Mainnet.sol, the protected harness, and the first 646 lines of docs/LAUNCH.md.\n- Manifest and constructors: argument order, types and the two backward references match the code. No owner, no setter, no proxy, no initializer, no external call or code-size check in any constructor.\n- Bytecode: compiled the sources and disassembled all three runtimes. No DELEGATECALL, CALLCODE or SELFDESTRUCT. Questions runtime is 22,963 bytes.\n- Live mainnet reads over RPC confirmed the assumptions the code makes: Intake v2 sells the action for 0.5 IMD with a 200,000 gas callback stipend and a four-word `requests` getter whose fourth word is the completed flag; seat ids run 0 to 1999 with total supply 2000; sIMD reports IMD as its asset with shares outstanding; the Adapter reverts for an unbound agent.\n\n**Not reached.** The repository's own test suites, docs/THREATS.md, docs/AUDITS.md and the README were only sampled, not audited. The full `forge test` run could not be completed on this machine because compiling the whole suite with via-IR exhausted memory. The live Intake's verified source was not read; its behaviour was checked only through the RPC calls above. A clean result here is not proof of absence, especially for the oracle plane's off-chain behaviour, which the contracts trust.","treeHash":null,"usage":{"cachedInputTokens":2482615,"inputTokens":482,"model":"claude-fable-5-1","outputTokens":51824,"runtime":"claude","turns":38,"wallClockMs":1111266}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"d0653dc91b6e2259","findings":[],"hash":"ea37fb9ab4e888c9b83f64857a88c7c24411f4462b97cbab33a1e11715d4945e","nodeId":"39b6c91e-dd77-4ea6-a27d-519648b137cc","outcome":"completed","summary":"The review is complete and `.imd-findings.json` is written with an empty findings list and a full coverage record. No tracked file was changed.\n\n**Result: no defect found in the assigned area.** I checked the Access Control, Trust Gap and Asymmetry failure modes against all three contracts and the manifest, and every one of the 22 verifier-listed entry points holds.\n\nWhat I traced and confirmed:\n\n- **No roles exist after deployment.** No constructor stores `msg.sender` or `tx.origin`. The oracle signer is set once in the constructor and nothing reaches the setter again. Every dependency is an immutable from the manifest, and the argument order and live addresses for the Intake, IMD and the signer match the oracle-consumer reference.\n- **The only guarded entry point is sound.** The callback requires the immutable Intake as sender and a request id this contract itself opened. A stranger who buys an Intake request naming Questions as the callback target is refused as an unknown request.\n- **Paired surfaces are symmetric where it matters.** Callback and `submit` share one settlement path and write identical state. The tip always goes to the recorded opener. Fund and defund both round in the pool's favour, and the returned tip can never lift a share above one wei, which blocks first-depositor inflation.\n- **No approval can be spent by a third party.** Every pull is from `msg.sender`. Questions reverts if the Intake leaves any allowance standing. Payroll approves exactly the offered amount, clears it, and reverts if more left.\n- **Trust-gap seams are either closed or disclosed.** The Adapter controller choosing where unclaimed tips go, sIMD visitors diluting a drip, and unserved-request griefing are documented trust roots in the threat model, not bypasses. The gas floors on the Adapter and seat reads stop a caller from faking an unbound agent or an ownerless seat.\n\nEvidence run locally: the nine launch manifest tests and nine targeted access-control tests all pass, including the callback-sender check, the panel-evidence `submit` refusal, the opener-tip protection, cross-seat isolation, reentrancy on `request`, and the two low-gas sweep fuzz tests.\n\nNot reached: the sIMD, seat token and Adapter addresses could not be verified against the chain without network access, so the coverage row for the manifest notes them as unverified. The fork suite in the repository covers that step.","treeHash":null,"usage":{"cachedInputTokens":2177213,"inputTokens":450,"model":"claude-fable-5-1","outputTokens":35449,"runtime":"claude","turns":30,"wallClockMs":992427}}],"verification":[{"checks":[{"durationMs":400264,"exitCode":0,"name":"build","output":"Compiling 115 files with Solc 0.8.26\nSolc 0.8.26 finished in 399.86s\nCompiler run successful!\n","passed":true},{"durationMs":6512,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/scaffold/Interfaces.t.sol:InterfacesCompileTest\n[PASS] test_oracleActionIsTheRightPaddedString() (gas: 217)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 184.44µs (45.85µs CPU time)\n\nRan 4 tests for test/questions/OracleConsumerConformance.t.sol:OracleConsumerConformanceTest\n[PASS] test_acceptsAFreshSignatureFromTheVectorKey() (gas: 156976)\n[PASS] test_acceptsTheProtocolSignatureAsDelivered() (gas: 155161)\n[PASS] test_callbackSelectorIsCanonical() (gas: 763)\n[PASS] test_digestMatchesTheProtocol() (gas: 10320)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 2.01ms (1.04ms CPU time)\n\nRan 1 test for test/questions/QuestionsCallbackGas.t.sol:CallbackGasBoolNoTest\n[PASS] test_callbackGas_staysUnderTheGate() (gas: 286674)\nLogs:\n  callback gas (bool): 95922\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.44ms (280.66µs CPU time)\n\nRan 1 test for test/questions/QuestionsCallbackGas.t.sol:CallbackGasUint256Test\n[PASS] test_callbackGas_staysUnderTheGate() (gas: 306647)\nLogs:\n  callback gas (uint256): 115796\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.95ms (264.09µs CPU time)\n\nRan 3 tests for test/payroll/PayrollGas.t.sol:PayrollFirstCallGasTest\n[PASS] test_gas_theFirstBookEver() (gas: 303422)\nLogs:\n  book, the first ever: 237338\n\n[PASS] test_gas_theFirstPayEver() (gas: 271088)\nLogs:\n  pay, the first ever: 263606\n\n[PASS] test_gas_theFirstTipEverToSixteenAgents() (gas: 516201)\nLogs:\n  tip, the first ever, 16 new ids and a remainder: 506058\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 1.60ms (207.58µs CPU time)\n\nRan 1 test for test/questions/QuestionsCallbackGas.t.sol:CallbackGasLongListTest\n[PASS] test_callbackGas_staysUnderTheGate() (gas: 409266)\nLogs:\n  callback gas (bytes32[]): 116654\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.22ms (330.64µs CPU time)\n\nRan 1 test for test/questions/QuestionsCallbackGas.t.sol:CallbackGasZeroSumTest\n[PASS] test_callbackGas_staysUnderTheGate() (gas: 286649)\nLogs:\n  callback gas (uint256): 95896\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.42ms (264.34µs CPU time)\n\nRan 6 tests for test/payroll/PayrollLaunchAudit.t.sol:PayrollLaunchAuditTest\n[PASS] test_audit_batchSkipsEscrowAndPaysOtherSeats() (gas: 301223)\n[PASS] test_audit_contractWalletBatchSkipsAnotherContractsSeat() (gas: 616059)\n[PASS] test_audit_contractWalletCanClaimItsOwnShareAndTip() (gas: 686551)\n[PASS] test_audit_escrowedTipCannotBeSweptWhileWaitingForItsOwner() (gas: 431294)\n[PASS] test_audit_observerCannotForceAgentTipIntoEscrow() (gas: 458386)\n[PASS] test_audit_observerCannotForceSeatShareIntoEscrow() (gas: 360064)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 2.64ms (924.25µs CPU time)\n\nRan 1 test for test/questions/QuestionsCallbackGas.t.sol:CallbackGasAddressListTest\n[PASS] test_callbackGas_staysUnderTheGate() (gas: 316872)\nLogs:\n  callback gas (address[]): 115936\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.08ms (175.16µs CPU time)\n\nRan 2 tests for test/payroll/audit/AuditReports.t.sol:AuditBudgetBoundaryTest\n[PASS] test_report1_finding1_aBookingAtTheBoundaryReleasesNothing() (gas: 1203427)\n[PASS] test_report1_finding1_aOneWeiBookingAtTheBoundaryDoesNotStarveTheMeters() (gas: 1150062)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 3.45ms (1.26ms CPU time)\n\nRan 4 tests for test/payroll/PayrollFixture.t.sol:PayrollFixtureTest\n[PASS] test_fixture_agreesWithTheFrozenInterfaceAndAddresses() (gas: 121477)\n[PASS] test_fixture_recordedBindingPaysTheRecordedSeatOwner() (gas: 573710)\n[PASS] test_fixture_recordedUnknownAgentRevertMeansUnbound() (gas: 476158)\n[PASS] test_fixture_seatPoolPaysTheRecordedOwner() (gas: 559929)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 3.46ms (883.17µs CPU time)\n\nRan 1 test for test/questions/QuestionsCallbackGas.t.sol:CallbackGasAddressTest\n[PASS] test_callbackGas_staysUnderTheGate() (gas: 306636)\nLogs:\n  callback gas (address): 115833\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 990.05µs (144.96µs CPU time)\n\nRan 25 tests for test/payroll/PayrollBooking.t.sol:PayrollBookingTest\n[PASS] test_book_afterAFailedPayNothingIsLost() (gas: 531232)\n[PASS] test_book_doesNotBookTips() (gas: 264535)\n[PASS] test_book_neverCountsMoneyTwice() (gas: 598506)\n[PASS] test_book_returnsZeroWhenNothingArrived() (gas: 400125)\n[PASS] test_book_splitsAPlainTransfer() (gas: 554779)\n[PASS] test_constructor_constantsMatchTheBrief() (gas: 49078)\n[PASS] test_constructor_deploysAgainstAddressesWithoutCode() (gas: 33405)\n[PASS] test_constructor_revertsOnARepeatedFeed() (gas: 4867)\n[PASS] test_constructor_revertsOnAZeroAddress() (gas: 5224)\n[PASS] test_constructor_revertsOnZeroSeats() (gas: 4977)\n[PASS] test_constructor_storesEveryDependency() (gas: 46287)\n[PASS] test_implementsTheFrozenInterface() (gas: 18913)\n[PASS] test_ledger_accumulatesOverManyBookings() (gas: 2820407)\n[PASS] test_ledger_startsAtZero() (gas: 92372)\n[PASS] test_pay_anyoneMayPay() (gas: 390755)\n[PASS] test_pay_booksWhatArrivedNotWhatWasAsked() (gas: 1056077)\n[PASS] test_pay_memoDoesNotChangeTheSplit() (gas: 391027)\n[PASS] test_pay_oneWeiIsAllStakers() (gas: 354256)\n[PASS] test_pay_revertsWithoutAnAllowance() (gas: 100741)\n[PASS] test_pay_revertsWithoutTheBalance() (gas: 99099)\n[PASS] test_pay_roundingRemainderGoesToStakers() (gas: 415849)\n[PASS] test_pay_splitsFiftyThirtyTwenty() (gas: 468414)\n[PASS] test_pay_zeroDoesNothingAndDoesNotRevert() (gas: 60506)\n[PASS] test_tokenUsedIsTheConstructorArgument() (gas: 9014)\n[PASS] test_unbookedIgnoresABalanceBelowWhatIsOwed() (gas: 563025)\nSuite result: ok. 25 passed; 0 failed; 0 skipped; finished in 6.75ms (4.65ms CPU time)\n\nRan 6 tests for test/questions/QuestionsSharedAnswers.t.sol:QuestionsSharedAnswersTest\n[PASS] test_aTwinAppliesItsOwnPanelFloorToASharedAnswer() (gas: 1988851)\n[PASS] test_aTwinCannotTakeTheAnswerBeforeItsOwnRequestHasEnded() (gas: 2056303)\n[PASS] test_aTwinMayUseAnAnswerAfterTheFeedThatPaidForIt() (gas: 2071514)\n[PASS] test_anAnswerUsedOnATwinStillReachesTheFeedThatPaidForIt() (gas: 2168354)\n[PASS] test_anAttestationAnswersEachFeedOnce() (gas: 3417465)\n[PASS] test_submitStillRescuesTheFeedThatPaidAfterATwinUsedTheAnswer() (gas: 2220650)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 7.80ms (6.14ms CPU time)\n\nRan 23 tests for test/payroll/JobsReport.t.sol:JobsReportPrintTest\n[PASS] test_bestDay_aTieKeepsTheEarlierDay() (gas: 489466)\n[PASS] test_bestDay_isTheLargestSingleDay() (gas: 1214325)\n[PASS] test_bestDay_windowLengthLimitIsInclusive() (gas: 494312)\n[PASS] test_constructor_deploysBeforeQuestionsHasCode() (gas: 7511)\n[PASS] test_constructor_revertsOnARepeatedFeed() (gas: 6570)\n[PASS] test_constructor_revertsOnAZeroQuestions() (gas: 4327)\n[PASS] test_constructor_storesTheFeeds() (gas: 21451)\n[PASS] test_print_aWindowNotOverYetIsPassedOverForGood() (gas: 720739)\n[PASS] test_print_acceptsAZeroDay() (gas: 239318)\n[PASS] test_print_neverCountsABlockTwice() (gas: 886097)\n[PASS] test_print_passesOverAFailedRound() (gas: 452097)\n[PASS] test_print_passesOverAWindowThatIsEmptyOrNotOverYet() (gas: 684384)\n[PASS] test_print_passesOverAnAnswerTooLargeToBeAFigure() (gas: 562383)\n[PASS] test_print_readsAtMostEightRoundsACall() (gas: 3667373)\n[PASS] test_print_revertsOnlyWhenQuestionsDoes() (gas: 352079)\n[PASS] test_print_skippedRoundsCountAgainstTheEight() (gas: 1090901)\n[PASS] test_print_stopsAtAPendingRoundAndResumesWhenItIsAnswered() (gas: 796441)\n[PASS] test_print_storesAnAnsweredRound() (gas: 407865)\n[PASS] test_print_withNothingToReadChangesNothing() (gas: 76600)\n[PASS] test_streak_aCatchUpWindowAfterAMissedDayEndsIt() (gas: 1349490)\n[PASS] test_streak_aWindowThatStartsOneBlockLateBreaksIt() (gas: 513389)\n[PASS] test_streak_countsContiguousPrintsAndResetsOnAGap() (gas: 1184453)\n[PASS] test_streak_windowLengthLimitIsInclusive() (gas: 780460)\nSuite result: ok. 23 passed; 0 failed; 0 skipped; finished in 8.43ms (6.27ms CPU time)\n\nRan 12 tests for test/payroll/PayrollGas.t.sol:PayrollGasTest\n[PASS] test_gas_book() (gas: 100431)\nLogs:\n  book: 98189\n\n[PASS] test_gas_claimAFullListOfSeats() (gas: 11892534)\nLogs:\n  claimSeats, 200 seats of 200 owners: 11845163\n\n[PASS] test_gas_claimSeat() (gas: 108465)\nLogs:\n  claimSeat: 105937\n\n[PASS] test_gas_claimTip() (gas: 117265)\nLogs:\n  claimTip: 119398\n\n[PASS] test_gas_claimTwentySeats() (gas: 1235653)\nLogs:\n  claimSeats, 20 seats of 20 owners: 1229322\n\n[PASS] test_gas_crown() (gas: 296496)\nLogs:\n  crown, list of 10: 177671\n\n[PASS] test_gas_drip() (gas: 71515)\nLogs:\n  drip: 68833\n\n[PASS] test_gas_fundFeeds() (gas: 172786)\nLogs:\n  fundFeeds, one meter topped up: 190268\n\n[PASS] test_gas_pay() (gas: 110924)\nLogs:\n  pay: 103380\n\n[PASS] test_gas_print() (gas: 234600)\nLogs:\n  print, one period with its count: 232314\n\n[PASS] test_gas_tipToFourKnownAgents() (gas: 85536)\nLogs:\n  tip, 4 ids already owed: 77631\n\n[PASS] test_gas_tipToSixteenNewAgents() (gas: 437629)\nLogs:\n  tip, 16 new ids: 427165\n\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 9.70ms (6.57ms CPU time)\n\nRan 2 tests for test/payroll/audit/AuditReports.t.sol:AuditBudgetParkTest\n[PASS] test_report1_finding2_parkedIMDDoesNotTurnTheOldTrancheIntoStakerStream() (gas: 1505669)\n[PASS] test_report2_finding2_aFundAndDefundAroundFundFeedsChangesNothing() (gas: 7897859)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 11.18ms (8.65ms CPU time)\n\nRan 18 tests for test/payroll/JobsReport.t.sol:JobsReportCrownTest\n[PASS] test_crown_aShortListFillsFewerPlaces() (gas: 563481)\n[PASS] test_crown_needsAnAnsweredRound() (gas: 252511)\n[PASS] test_crown_onlyOncePerRound() (gas: 341300)\n[PASS] test_crown_readsARealAttestedList() (gas: 326038)\n[PASS] test_crown_readsAnyValidLayoutOfTheList() (gas: 316390)\n[PASS] test_crown_readsTheRealAttestedListOfThree() (gas: 338356)\n[PASS] test_crown_rejectsAttestedBytesThatAreNotAnAddressList() (gas: 903434)\n[PASS] test_crown_rejectsBytesThatAreNotTheAttestedOnes() (gas: 215611)\n[PASS] test_crown_revertsWhenQuestionsDoes() (gas: 171045)\n[PASS] test_crown_roundsMayBeCrownedInAnyOrder() (gas: 577635)\n[PASS] test_crown_storesTheTopThreeOfTheAttestedList() (gas: 375633)\n[PASS] test_views_aPageHoldsAtMostOneHundred() (gas: 22793428)\n[PASS] test_views_beforeAnythingExists() (gas: 67579)\n[PASS] test_views_countAtRevertsPastTheEnd() (gas: 322643)\n[PASS] test_views_pagesOfTheCounts() (gas: 1989247)\n[PASS] test_views_pagesOfTheHistory() (gas: 2046576)\n[PASS] test_views_printAtRevertsPastTheEnd() (gas: 352161)\n[PASS] test_views_summaryGathersTheRunningFigures() (gas: 1265592)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 11.33ms (9.82ms CPU time)\n\nRan 19 tests for test/payroll/JobsReport.t.sol:JobsReportCountsTest\n[PASS] test_counts_aCatchUpCountIsRecordedAndJoinsNoPrint() (gas: 1402086)\n[PASS] test_counts_aCountForADayThatWasNeverPrintedIsStillRecorded() (gas: 769942)\n[PASS] test_counts_aCountJoinsThePrintForTheSameWindow() (gas: 608229)\n[PASS] test_counts_aFailedRoundIsPassedOverAndTheRetryCounts() (gas: 670364)\n[PASS] test_counts_aFeedThatDriftedStillPairsEveryDay() (gas: 4278984)\n[PASS] test_counts_aLongRunOfUncountedPrintsIsWorkedThroughInBoundedSteps() (gas: 4035614)\n[PASS] test_counts_aLongerPrintDoesNotTakeADaysCount() (gas: 1157826)\n[PASS] test_counts_aMissedDayDoesNotShiftLaterCounts() (gas: 1167901)\n[PASS] test_counts_aShiftOfExactlyHalfJoinsNeither() (gas: 1197100)\n[PASS] test_counts_aShiftOfMoreThanHalfJoinsTheNextDay() (gas: 1235366)\n[PASS] test_counts_aZeroCountIsACount() (gas: 425205)\n[PASS] test_counts_anAnswerThatArrivesFirstIsRecordedThenPaired() (gas: 694721)\n[PASS] test_counts_anAnswerThatArrivesLaterIsAttachedThen() (gas: 632189)\n[PASS] test_counts_neverCountABlockTwice() (gas: 854043)\n[PASS] test_counts_pairWithThePrintTheyMostlyShare() (gas: 1302623)\n[PASS] test_counts_shareTheEightRoundsWithPayrolls() (gas: 2499786)\n[PASS] test_counts_theReportIsTheSameWheneverPrintIsCalled() (gas: 3772691)\n[PASS] test_counts_unusableAnswersArePassedOver() (gas: 957387)\n[PASS] test_print_neverReadsTheEmployersFeed() (gas: 1016160)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 12.83ms (11.20ms CPU time)\n\nRan 6 tests for test/launch/LaunchRunbook.t.sol:LaunchRunbookTest\n[PASS] test_proof_shellRecipeGivesTheBodyTheContractSends() (gas: 4800575)\n[PASS] test_proof_statedPriceAndActionAreTheFeeds() (gas: 1067614)\n[PASS] test_runbook_documentedCalldataCreatesTheManifestFeeds() (gas: 9437342)\n[PASS] test_runbook_documentedCalldataIsWhatTheFixturesGive() (gas: 2377829)\n[PASS] test_runbook_firstDayGoesThroughInTheOrderWritten() (gas: 14985672)\n[PASS] test_runbook_printsTheCalldata() (gas: 234410)\nLogs:\n  feed: payrolls\n  feedId: 0x4bf83605cd50e9658472bde9be314bb3848a563301fa793328bef17ad2a07b61\n  calldata bytes: 1572\n  createFeed calldata: 0x8320d106000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000005a06f7261636c652e72657175657374406f7261636c652d310000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000151800000000000000000000000000000000000000000000000000000000000001b580000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000001bc16d674ec8000000000000000000000000000000000000000000000000000000b1a2bc2ec500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b77b22616e7377657254797065223a2275696e74323536222c22636861696e4964223a312c22646566696e6974696f6e73223a7b22726563697065223a227b5c226b696e645c223a5c226c6f672d73756d5c222c5c22616464726573735c223a5c223078643334613939626330663637616531626264363363363630653664306230646430336532363362375c222c5c226576656e745c223a5c226576656e74205472616e73666572286164647265737320696e64657865642066726f6d2c206164647265737320696e646578656420746f2c2075696e743235362076616c7565295c222c5c2273756d4172675c223a5c2276616c75655c222c5c226162735c223a66616c73652c5c2266696c7465725c223a7b5c22746f5c223a5c223078346530666135376264653732363037393335363533376532663334643637316539663431616462635c227d7d202d207772697465207265636970652065786163746c7920746869732c206576656e74207465787420696e636c756465642e227d2c227175657374696f6e223a2257686174206973207468652073756d206f66207468652076616c756520617267756d656e74206f66206576657279205472616e73666572286164647265737320696e64657865642066726f6d2c206164647265737320696e646578656420746f2c2075696e743235362076616c756529206576656e7420656d69747465642062792074686520746f6b656e20636f6e7472616374203078643334613939626330663637616531626264363363363630653664306230646430336532363362372077686f736520746f20617267756d656e742069732030783465306661353762646537323630373933353635333765326633346436373165396634316164626320696e207468652077696e646f773f222c2276223a312c2277696e646f77223a7b2266726f6d426c6f636b223a00000000000000000000000000000000000000000000000000000000000000000000000000000000562c2265766964656e6365223a22636861696e222c2270616e656c53697a65223a372c2271756f72756d223a352c22746f6c6572616e6365427073223a302c2276616c6964466f725365636f6e6473223a38363430307d00000000000000000000\n  feed: hires\n  feedId: 0xfde22d9c1b97b7ce9763dff388a66366f9012d4ba7c57c3239377a75532bee4d\n  calldata bytes: 1508\n  createFeed calldata: 0x8320d106000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000005606f7261636c652e72657175657374406f7261636c652d310000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000151800000000000000000000000000000000000000000000000000000000000001b580000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000001bc16d674ec8000000000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026f7b22616e7377657254797065223a2275696e74323536222c22636861696e4964223a312c22646566696e6974696f6e73223a7b22726563697065223a227b5c226b696e645c223a5c226c6f672d636f756e745c222c5c22616464726573735c223a5c223078643334613939626330663637616531626264363363363630653664306230646430336532363362375c222c5c226576656e745c223a5c226576656e74205472616e73666572286164647265737320696e64657865642066726f6d2c206164647265737320696e646578656420746f2c2075696e743235362076616c7565295c222c5c2266696c7465725c223a7b5c22746f5c223a5c223078346530666135376264653732363037393335363533376532663334643637316539663431616462635c227d7d202d207772697465207265636970652065786163746c7920746869732c206576656e74207465787420696e636c756465642e227d2c227175657374696f6e223a22486f77206d616e79205472616e73666572286164647265737320696e64657865642066726f6d2c206164647265737320696e646578656420746f2c2075696e743235362076616c756529206576656e7473206469642074686520746f6b656e20636f6e74726163742030786433346139396263306636376165316262643633633636306536643062306464303365323633623720656d69742077686f736520746f20617267756d656e742069732030783465306661353762646537323630373933353635333765326633346436373165396634316164626320696e207468652077696e646f773f222c2276223a312c2277696e646f77223a7b2266726f6d426c6f636b223a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000562c2265766964656e6365223a22636861696e222c2270616e656c53697a65223a372c2271756f72756d223a352c22746f6c6572616e6365427073223a302c2276616c6964466f725365636f6e6473223a38363430307d00000000000000000000\n  feed: employers\n  feedId: 0x22ad8df0e0af07aa59e29aa7f5540e0022fbfda0651ccae3eccb968553a14835\n  calldata bytes: 1924\n  createFeed calldata: 0x8320d106000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000007206f7261636c652e72657175657374406f7261636c652d31000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000015180000000000000000000000000000000000000000000000000000000000000bf68000000000000000000000000000000000000000000000000000000000000c4e0000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000001bc16d674ec8000000000000000000000000000000000000000000000000000000b1a2bc2ec500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004367b22616e7377657254797065223a22616464726573735b5d222c22636861696e4964223a312c22646566696e6974696f6e73223a7b226d6574686f64223a225265616420746865205472616e73666572286164647265737320696e64657865642066726f6d2c206164647265737320696e646578656420746f2c2075696e743235362076616c756529206c6f677320656d697474656420627920307864333461393962633066363761653162626436336336363065366430623064643033653236336237206f6e20457468657265756d206d61696e6e657420696e2074686520626c6f636b2077696e646f772c206b6565702074686f73652077686f736520746f206973203078346530666135376264653732363037393335363533376532663334643637316539663431616462632c206164642075702076616c7565207065722066726f6d20616464726573732c206f72646572206279207468617420746f74616c2066726f6d206c61726765737420746f20736d616c6c6573742077697468207469657320627920617363656e64696e6720616464726573732c20616e6420616e73776572207468652066697273742033206164647265737365732e222c22736f75726365223a22457468657265756d206d61696e6e6574206576656e74206c6f6773206f6e6c792c20726561642066726f6d20616e792066756c6c206e6f64652e204e6f2077656273697465206f7220696e6465782e227d2c2265766964656e6365223a2270616e656c222c2268656164223a332c227175657374696f6e223a225768696368207468726565206164647265737365732073656e7420746865206d6f737420494d442028746f6b656e20636f6e7472616374203078643334613939626330663637616531626264363363363630653664306230646430336532363362372920746f20307834653066613537626465373236303739333536353337653266333464363731653966343161646263206f6e20457468657265756d206d61696e6e657420696e207468652077696e646f773f2052616e6b2073656e64657273206279207468652073756d206f662076616c7565206f766572205472616e73666572286164647265737320696e64657865642066726f6d2c206164647265737320696e646578656420746f2c2075696e743235362076616c756529206576656e7473206f66207468617420636f6e74726163742077686f736520746f20617267756d656e74206973203078346530666135376264653732363037393335363533376532663334643637316539663431616462632c2067726f757065642062792066726f6d3b20616e737765722065786163746c792074686520746f702033206164647265737365732c206c6172676573742066697273742c207469657320627920617363656e64696e6720616464726573732e222c2276223a312c2277696e646f77223a7b2266726f6d426c6f636b223a0000000000000000000000000000000000000000000000000000000000000000000000000000000000322c2270616e656c53697a65223a372c2271756f72756d223a352c2276616c6964466f725365636f6e6473223a38363430307d0000000000000000000000000000\n\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 22.72ms (22.24ms CPU time)\n\nRan 8 tests for test/questions/RealAttestations.t.sol:RealAttestationsTest\n[PASS] test_liveOracleSignaturesVerifyInOurDomain() (gas: 6723934)\n[PASS] test_realAddress_acceptedEndToEnd() (gas: 6653405)\n[PASS] test_realAttestation_tamperedIsRefused() (gas: 4277361)\n[PASS] test_realLogSum_acceptedEndToEnd() (gas: 4335739)\n[PASS] test_realNo_storedNotReverted() (gas: 3160595)\n[PASS] test_realPanelNumber_acceptedEndToEnd() (gas: 4556402)\n[PASS] test_realYes_acceptedEndToEnd() (gas: 3079094)\n[PASS] test_realYes_nonAsciiQuestion_acceptedEndToEnd() (gas: 3114532)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 17.22ms (26.29ms CPU time)\n\nRan 1 test for test/payroll/PayrollGas.t.sol:PayrollAgedTipGasTest\n[PASS] test_gas_tipToSixteenAgentsWhoseEarlierTipsMustBeAged() (gas: 569443)\nLogs:\n  tip, 16 ids with tips to age: 553983\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.42ms (136.41µs CPU time)\n\nRan 11 tests for test/payroll/integration/LaunchA.t.sol:LaunchAIntegrationTest\n[PASS] test_integration_aCatchUpCountIsKeptAndTheDaysAfterPairAgain() (gas: 6512395)\n[PASS] test_integration_aRealWindowIsAlwaysOverWhenItsAnswerIsPrinted() (gas: 3553054)\n[PASS] test_integration_aShortBudgetGoesToTheTwoDailyFeeds() (gas: 2674939)\n[PASS] test_integration_anUnknownHouseFeedIsSkipped() (gas: 1256958)\n[PASS] test_integration_crownAcceptsARealAttestedList() (gas: 2752599)\n[PASS] test_integration_fundFeedsTopsUpRealMeters() (gas: 2203329)\n[PASS] test_integration_launchAConstructsOnAnEmptyChainInsideTheGasGate() (gas: 9883347)\nLogs:\n  initcode of launch A, bytes: 46332\n  launch A at 240 gas a byte: 11119680\n  creation alone, measured here: 9689381\n\n[PASS] test_integration_printFollowsRealRounds() (gas: 4872999)\n[PASS] test_integration_theHiresCountSurvivesOneLateRequest() (gas: 16993485)\n[PASS] test_integration_theReportIsCompleteWithoutTheEmployersFeed() (gas: 5780256)\n[PASS] test_integration_theStreakEndsAfterAMissedDay() (gas: 7080259)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 27.77ms (29.10ms CPU time)\n\nRan 2 tests for test/payroll/PayrollGas.t.sol:PayrollAgeingPayGasTest\n[PASS] test_gas_fundFeedsThatAlsoReleasesTheWaitingFeedBudget() (gas: 241360)\nLogs:\n  fundFeeds, one meter topped up and the waiting budget released: 261090\n\n[PASS] test_gas_payThatAlsoAgesTheWaitingFeedBudget() (gas: 184536)\nLogs:\n  pay, with the feed budget aged: 128509\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 2.65ms (258.14µs CPU time)\n\nRan 41 tests for test/questions/QuestionsAnswers.t.sol:QuestionsAnswersTest\n[PASS] test_callback_aNoIsStoredNotReverted() (gas: 2310665)\n[PASS] test_callback_aZeroSumIsStoredNotReverted() (gas: 1050886)\n[PASS] test_callback_aboutAnotherChain_reverts() (gas: 1004658)\n[PASS] test_callback_afterAbandon_reverts() (gas: 1061279)\n[PASS] test_callback_anEmptyListIsStored() (gas: 1692663)\n[PASS] test_callback_answersAQuestionAPanelJudges() (gas: 1496115)\n[PASS] test_callback_everyAnswerTypeBecomesOneWord() (gas: 7641557)\n[PASS] test_callback_expired_reverts() (gas: 1183349)\n[PASS] test_callback_fitsTheStipend_evenALoweredOne() (gas: 1733050)\n[PASS] test_callback_forASettledId_reverts() (gas: 1216416)\n[PASS] test_callback_forAnUnknownId_reverts() (gas: 973590)\n[PASS] test_callback_forAnotherWindow_reverts() (gas: 1187524)\n[PASS] test_callback_fromASmallerPanel_reverts() (gas: 1347597)\n[PASS] test_callback_fromAnyoneButTheIntake_reverts() (gas: 1001720)\n[PASS] test_callback_issuedInTheFuture_reverts() (gas: 1110986)\n[PASS] test_callback_lenientFeed_takesARerunSettledAnswerDownToItsFloor() (gas: 1840946)\n[PASS] test_callback_malformedAnswers_revert() (gas: 4230220)\n[PASS] test_callback_ofAnotherType_reverts() (gas: 1009085)\n[PASS] test_callback_replayed_reverts() (gas: 2304035)\n[PASS] test_callback_signedByAnotherKey_reverts() (gas: 956891)\n[PASS] test_callback_signedForAnotherConsumerOrChain_reverts() (gas: 1070193)\n[PASS] test_callback_storesTheAnswer() (gas: 1135753)\n[PASS] test_callback_strictFeed_needsAgreedAtLeastTheSignedQuorum() (gas: 1348331)\n[PASS] test_callback_tampered_reverts() (gas: 2051428)\n[PASS] test_callback_theIntakeRefusesToStarveIt() (gas: 956606)\n[PASS] test_callback_toAnotherQuestion_reverts() (gas: 1007334)\n[PASS] test_callback_unpinnedFeed_ignoresTheQuestionHashOnly() (gas: 1839634)\n[PASS] test_callback_withAnotherBlockHash_reverts() (gas: 1186502)\n[PASS] test_reveal_isOnlyForListFeeds() (gas: 1093640)\n[PASS] test_reveal_publishesTheListBehindARound() (gas: 1844926)\n[PASS] test_submit_afterARequestThatEndedWithoutAnAnswer() (gas: 1094637)\n[PASS] test_submit_anAnswerToAnotherFeed_reverts() (gas: 2237423)\n[PASS] test_submit_appliesEveryCheckTheCallbackDoes() (gas: 1746421)\n[PASS] test_submit_beforeTheIntakeHasCompletedTheRequest_reverts() (gas: 1561175)\n[PASS] test_submit_deliversAnAnswerTheCallbackMissed() (gas: 1378168)\n[PASS] test_submit_isNotForAQuestionAPanelJudges() (gas: 1748037)\n[PASS] test_submit_needsAPinnedQuestion() (gas: 1725495)\n[PASS] test_submit_opensThirtyMinutesAfterARequestTheIntakeNeverCompleted() (gas: 1361507)\n[PASS] test_submit_panelEvidenceIsReadFromTheDocumentNotTheWording() (gas: 1747953)\n[PASS] test_submit_withAnIntakeThatCannotBeRead_waitsTheThirtyMinutes() (gas: 8098978)\n[PASS] test_submit_withoutAPendingRoundOrAFeed_reverts() (gas: 79399)\nSuite result: ok. 41 passed; 0 failed; 0 skipped; finished in 38.72ms (41.27ms CPU time)\n\nRan 15 tests for test/payroll/PayrollSeats.t.sol:PayrollSeatsTest\n[PASS] test_claimSeat_cannotTouchAnotherSeatsShare() (gas: 390074)\n[PASS] test_claimSeat_followsTheSeatWhenItChangesHands() (gas: 381544)\n[PASS] test_claimSeat_paysTheCurrentWalletOwner() (gas: 241092)\n[PASS] test_claimSeat_paysTheOwnerWhoeverCalls() (gas: 329499)\n[PASS] test_claimSeat_rejectsAnOwnerThatIsNotAnAddress() (gas: 1092258)\n[PASS] test_claimSeat_revertsForAnIdThatIsNotASeat() (gas: 55250)\n[PASS] test_claimSeat_secondClaimPaysNothing() (gas: 173674)\n[PASS] test_claimSeat_waitsWhileOwnerOfReverts() (gas: 469797)\n[PASS] test_claimSeat_whenTheSeatTokenHasNoCode() (gas: 359935)\n[PASS] test_claimSeats_emptyAndAllSkippedListsPayNothing() (gas: 206578)\n[PASS] test_claimSeats_paysNeighboursWithOneOwnerInOneTransfer() (gas: 427848)\n[PASS] test_claimSeats_revertsAboveTheListLimit() (gas: 325258)\n[PASS] test_claimSeats_skipsWhatItCannotPayAndPaysTheRest() (gas: 416871)\n[PASS] test_everySeatGetsTheSameAndThePoolIsNeverOverpaid() (gas: 119051150)\n[PASS] test_seatOwnedByPayrollRecyclesItsShare() (gas: 390574)\nSuite result: ok. 15 passed; 0 failed; 0 skipped; finished in 39.75ms (36.64ms CPU time)\n\nRan 5 tests for test/questions/QuestionHashFixtures.t.sol:QuestionHashFixturesTest\n[PASS] test_everyAttestedQuestionHashIsRebuilt() (gas: 13722722)\n[PASS] test_fixturesCoverEveryShapeTheFeedsUse() (gas: 418668)\n[PASS] test_hashIsRebuiltFromBodiesSentOnChain() (gas: 2279133)\n[PASS] test_quoteFollowsJsonStringify() (gas: 41366)\n[PASS] test_theRuleNeedsBothRefinements() (gas: 222823)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 54.84ms (71.08ms CPU time)\n\nRan 1 test for test/payroll/PayrollScenario.t.sol:PayrollScenarioTest\n[PASS] test_scenario_fortyFiveDays() (gas: 85432484)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 61.20ms (59.59ms CPU time)\n\nRan 8 tests for test/questions/HouseFeedProofs.t.sol:HouseFeedProofsTest\n[PASS] test_proofs_aChangedAnswerIsRefused() (gas: 4221446)\n[PASS] test_proofs_eachAnswerDecodesUnderItsFeedsAnswerType() (gas: 303905)\n[PASS] test_proofs_theBodyThatWasBoughtIsTheBodyTheContractSends() (gas: 366362)\n[PASS] test_proofs_theContractsQuestionHashIsTheAttestedOne() (gas: 345997)\n[PASS] test_proofs_theDocumentStatesWhatTheRecordsHold() (gas: 999990)\n[PASS] test_proofs_theFirstEmployersBodyWasNotAttested() (gas: 160931)\n[PASS] test_proofs_thePanelTheSignerAndTheValidityAreWhatTheFeedsRequire() (gas: 311187)\n[PASS] test_proofs_theRealSignedAnswersPassEveryCheckOfTheCallback() (gas: 12655798)\nLogs:\n  callback gas, real answer, payrolls: 115835\n  callback gas, real answer, hires: 115835\n  callback gas, real answer, employers: 115975\n\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 74.20ms (36.37ms CPU time)\n\nRan 3 tests for test/payroll/PayrollSeats.t.sol:PayrollSeatCarryTest\n[PASS] test_carry_claimsNeverExceedWhatThePoolWasGiven() (gas: 15192479)\n[PASS] test_carry_poolSmallerThanTheSeatCountPaysNobodyYet() (gas: 456396)\n[PASS] test_carry_weiThatDoNotDivideWaitForTheNextCredit() (gas: 543833)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 10.38ms (9.03ms CPU time)\n\nRan 31 tests for test/payroll/PayrollFeeds.t.sol:PayrollFeedsTest\n[PASS] test_budget_aBookingAgesTheBudgetAndReleasesNothing() (gas: 866664)\n[PASS] test_budget_aLongSilenceReleasesAllOfIt() (gas: 838080)\n[PASS] test_budget_aPartialTopUpTakesOnlyWhatLeftOutOfWhatIsDue() (gas: 1382469)\n[PASS] test_budget_aRefusedTopUpDoesNotHoldBackWhatIsDue() (gas: 1131593)\n[PASS] test_budget_dueIsSpentBeforeOldAndOldBeforeFresh() (gas: 2306513)\n[PASS] test_budget_isKeptThroughOneBoundaryAndReleasedAtTheNext() (gas: 938161)\n[PASS] test_budget_metersAreServedBeforeAnythingIsReleased() (gas: 1318379)\n[PASS] test_budget_releasedMoneyReachesStakersThroughTheStream() (gas: 21073089)\n[PASS] test_budget_spendingComesOutOfTheOldTrancheFirst() (gas: 1417779)\n[PASS] test_budget_whoCrossesTheBoundaryFirstDoesNotMatter() (gas: 2731390)\n[PASS] test_callBackDuringATopUp_isRefused() (gas: 980435)\n[PASS] test_feedShortfalls_reportsWhatEachMeterLacks() (gas: 93606)\n[PASS] test_fundFeeds_capsTheCostItAssumes() (gas: 940962)\n[PASS] test_fundFeeds_doesNotCountWhatOthersPutOnAMeter() (gas: 1328055)\n[PASS] test_fundFeeds_goesNoFurtherThanTheRunway() (gas: 1170295)\n[PASS] test_fundFeeds_replacesOnlyPayrollsPartOfWhatAMeterSpent() (gas: 1473224)\n[PASS] test_fundFeeds_revertsIfATopUpTakesMoreThanItWasOffered() (gas: 1606421)\n[PASS] test_fundFeeds_skipsAFeedQuestionsDoesNotKnow() (gas: 694931)\n[PASS] test_fundFeeds_skipsAFeedWhoseActionIsNotSold() (gas: 675111)\n[PASS] test_fundFeeds_theBalanceCoversWhatIsOwedInTheMiddleOfATopUp() (gas: 1040888)\n[PASS] test_fundFeeds_theFirstTwoFeedsShareAShortBudgetByNeed() (gas: 784980)\n[PASS] test_fundFeeds_theThirdFeedTakesOnlyWhatTheFirstTwoLeave() (gas: 1152539)\n[PASS] test_fundFeeds_topsEachMeterUpToItsRunway() (gas: 942523)\n[PASS] test_fundFeeds_unevenNeedsGetTheSameFraction() (gas: 851727)\n[PASS] test_fundFeeds_whatDidNotLeaveGoesBackWhereItCameFrom() (gas: 1777429)\n[PASS] test_fundFeeds_withNoBudgetDoesNothing() (gas: 63780)\n[PASS] test_questionsAnswersNonsense_fundsNothing() (gas: 908461)\n[PASS] test_questionsDown_blocksNothing() (gas: 1589090)\n[PASS] test_questionsFundReverts_keepsTheBudgetAndClearsTheAllowance() (gas: 661663)\n[PASS] test_questionsWithoutCode_fundsNothing() (gas: 372098)\n[PASS] test_topUpThatMovesLess_isBookedByWhatLeft() (gas: 942591)\nSuite result: ok. 31 passed; 0 failed; 0 skipped; finished in 74.95ms (28.25ms CPU time)\n\nRan 6 tests for test/payroll/audit/AuditReports.t.sol:AuditStreamTest\n[PASS] testFuzz_report2_finding3_theRuleForWhenABookingSlowsTheOldMoney(uint256,uint256) (runs: 256, μ: 531826, ~: 534697)\n[PASS] test_report1_finding3_aBookingDelaysMoneyAlreadyVestingUpToSevenDays() (gas: 32142301)\n[PASS] test_report1_finding4_dueNowIsZeroWhileTheVaultHasNoStakers() (gas: 657177)\n[PASS] test_report2_finding3_aBookingEqualToTheRemainderOneHourBeforeTheEnd() (gas: 501383)\n[PASS] test_report2_finding3_dustAgainstARemainderThatIsDustMovesTheEnd() (gas: 1431677)\n[PASS] test_report2_finding4_dueNowIsZeroWhileTheVaultHasNoCode() (gas: 502604)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 76.14ms (86.55ms CPU time)\n\nRan 25 tests for test/questions/QuestionsFeeds.t.sol:QuestionsFeedsTest\n[PASS] testFuzz_checkFeed_saysWhatCreateFeedDoes(uint16,uint16,uint16,uint32,uint32,uint32,uint16,bool,uint96) (runs: 256, μ: 73739, ~: 65435)\n[PASS] testFuzz_feedIdOf_isTheDocumentedHash((bytes32,uint64,uint8,uint16,uint16,uint16,uint32,uint32,uint32,uint16,bool,bool,uint96,uint96,uint8,address,uint256,bytes),bytes,bytes) (runs: 256, μ: 15418, ~: 15418)\n[PASS] test_constructor_fixesItsThreeAddresses() (gas: 22263)\n[PASS] test_constructor_makesNoCallAndNeedsNoCode() (gas: 15638)\n[PASS] test_constructor_refusesZeroAddresses() (gas: 8710)\n[PASS] test_createFeed_acceptsEveryAnswerTypeByItsProtocolName() (gas: 3218414)\n[PASS] test_createFeed_idDependsOnEveryPart() (gas: 2373857)\n[PASS] test_createFeed_refusesABodyLongerThanTheIntakeTakes() (gas: 30985896)\n[PASS] test_createFeed_refusesALagOutsideFiveTo256() (gas: 1067203)\n[PASS] test_createFeed_refusesAPrefixThatIsNotTheFeedsCanonicalDocument() (gas: 272734)\n[PASS] test_createFeed_refusesATailThatDisagreesWithTheFeed() (gas: 1068658)\n[PASS] test_createFeed_refusesATipAboveThePriceCap() (gas: 1096300)\n[PASS] test_createFeed_refusesAZeroAction() (gas: 53373)\n[PASS] test_createFeed_refusesAZeroPriceCap() (gas: 54991)\n[PASS] test_createFeed_refusesAnUnknownAnswerType() (gas: 52539)\n[PASS] test_createFeed_refusesAnotherChain() (gas: 53839)\n[PASS] test_createFeed_refusesBadPanels() (gas: 1769113)\n[PASS] test_createFeed_refusesGateFieldsThatContradict() (gas: 1115258)\n[PASS] test_createFeed_refusesValidityOutsideTheProtocolsRange() (gas: 1065331)\n[PASS] test_createFeed_refusesWindowsThatCannotWork() (gas: 1635872)\n[PASS] test_createFeed_roomAboveTheCadenceIsWhatCatchesUp() (gas: 3632675)\n[PASS] test_createFeed_storesTheFeedAndSaysSo() (gas: 634451)\n[PASS] test_createFeed_twiceIsHarmless() (gas: 719897)\n[PASS] test_thereIsNoOwnerAndNoSetter() (gas: 196072)\n[PASS] test_unknownFeed_readsAsEmptyAndRevertsWhereItMust() (gas: 259910)\nSuite result: ok. 25 passed; 0 failed; 0 skipped; finished in 78.88ms (82.29ms CPU time)\n\nRan 32 tests for test/questions/QuestionsRequest.t.sol:QuestionsRequestTest\n[PASS] testFuzz_gate_everyComparison(uint256,uint256,uint8) (runs: 256, μ: 826510, ~: 827220)\n[PASS] test_blocked_backsOffAfterFailedRounds() (gas: 5596499)\n[PASS] test_blocked_secondRequestInOneTransaction() (gas: 2804623)\n[PASS] test_blocked_secondRequestInOneTransaction_unmodifiedContract() (gas: 2946044)\n[PASS] test_blocked_untilTheCadenceHasElapsed() (gas: 1789376)\n[PASS] test_blocked_whenTheIntakeDoesNotSellTheAction() (gas: 357594)\n[PASS] test_blocked_whenTheMeterCannotPay() (gas: 1295415)\n[PASS] test_blocked_whenThePriceCannotBeRead() (gas: 6862979)\n[PASS] test_blocked_whenThePriceIsAboveTheFeedsCap() (gas: 1253277)\n[PASS] test_blocked_whenThePriceIsAbsurd_theViewsStillAnswer() (gas: 398452)\n[PASS] test_blocked_whileARoundIsPending() (gas: 1008584)\n[PASS] test_gate_longReply_readsOneWord() (gas: 1798215)\n[PASS] test_gate_opensWhenTheLineIsCrossed() (gas: 2633331)\n[PASS] test_gate_passesItsStoredArguments() (gas: 1595002)\n[PASS] test_gate_thatMisbehaves_isClosed() (gas: 2342319)\n[PASS] test_nextBody_isExactlyWhatRequestSends() (gas: 1038985)\n[PASS] test_request_afterTheCallersOwnIntakeRequest_isNeverServedAndEarnsTheCallerNothing() (gas: 2453247)\n[PASS] test_request_anUnservedRoundCanBeAnsweredThroughSubmit() (gas: 1849195)\n[PASS] test_request_anyoneMayCall_andEarnsTheTipWhenTheRoundIsAnswered() (gas: 1362141)\n[PASS] test_request_buysOneAnswerFromTheMeter() (gas: 1142216)\n[PASS] test_request_cannotBeReentered() (gas: 10345713)\n[PASS] test_request_paysTheLivePrice() (gas: 991381)\n[PASS] test_request_recordsTheClosingBlockHash() (gas: 2651826)\n[PASS] test_request_refusesAReusedRequestId() (gas: 7666567)\n[PASS] test_request_revertsRatherThanLeaveTheMetersShort() (gas: 7947834)\n[PASS] test_request_revertsWhenTheIntakeTakesLessThanThePrice() (gas: 7618250)\n[PASS] test_request_withNoTip_paysOnlyTheIntake() (gas: 1374555)\n[PASS] test_windows_contiguous_afterAFailedRound_startAtTheSameBlock() (gas: 2114437)\n[PASS] test_windows_contiguous_areCutAtTheMaximumAndCatchUp() (gas: 2492243)\n[PASS] test_windows_contiguous_tileExactly() (gas: 2527901)\n[PASS] test_windows_onAYoungChain_startAtBlockZeroOrWait() (gas: 1073334)\n[PASS] test_windows_rolling_alwaysTheNewestBlocks() (gas: 2343667)\nSuite result: ok. 32 passed; 0 failed; 0 skipped; finished in 88.39ms (115.46ms CPU time)\n\nRan 21 tests for test/questions/QuestionsMeter.t.sol:QuestionsMeterTest\n[PASS] testFuzz_fund_neverCostsAFunderMoreThanAWei(uint96,uint96,uint8) (runs: 256, μ: 1547302, ~: 826745)\n[PASS] test_defund_isNeverBlockedByTheFeedsState() (gas: 1145945)\n[PASS] test_defund_moreThanHeld_takesEverything() (gas: 354184)\n[PASS] test_defund_returnsTheSharesPartOfTheMeter() (gas: 292282)\n[PASS] test_defund_roundsDownAndLeavesTheDustOnTheMeter() (gas: 1858088)\n[PASS] test_defund_withNoShares_reverts() (gas: 264466)\n[PASS] test_fundFor_addsToAnExistingPositionAtTheMetersWorth() (gas: 1215060)\n[PASS] test_fundFor_afterTheMeterWasSpentToZero() (gas: 1811625)\n[PASS] test_fundFor_oneself_isPlainFunding() (gas: 185104)\n[PASS] test_fundFor_paysFromTheCallerAndCreditsTheBeneficiary() (gas: 357158)\n[PASS] test_fundFor_refusesWhatFundRefuses_andAZeroBeneficiary() (gas: 132299)\n[PASS] test_fund_afterSpending_mintsAtTheMetersCurrentWorth() (gas: 2401443)\n[PASS] test_fund_creditsWhatActuallyArrived() (gas: 7196018)\n[PASS] test_fund_firstFunderCannotRoundALaterFunderOut() (gas: 339220)\n[PASS] test_fund_firstFunderGetsOneSharePerWei() (gas: 215794)\n[PASS] test_fund_refusesAMeterBeyondItsWidth() (gas: 272490)\n[PASS] test_fund_refusesZeroAndUnknownFeeds() (gas: 66175)\n[PASS] test_fund_revertsWithoutAllowanceOrBalance() (gas: 140691)\n[PASS] test_rescale_aVeryOldStakeReadsAsZero() (gas: 15363969)\n[PASS] test_rescale_keepsEveryonesPartAndNeverOverflows() (gas: 34406833)\n[PASS] test_spentToZero_oldSharesAreRetired() (gas: 2012741)\nSuite result: ok. 21 passed; 0 failed; 0 skipped; finished in 166.61ms (209.10ms CPU time)\n\nRan 2 tests for test/payroll/PayrollFuzz.t.sol:PayrollSeatFuzzTest\n[PASS] testFuzz_seatPool_paysEachSeatExactlyItsShare(uint64[10],uint8[10]) (runs: 256, μ: 3250890, ~: 3261849)\n[PASS] testFuzz_seat_claimsDoNotMoveAnotherSeatsShare(uint64,uint8,uint8,uint8) (runs: 256, μ: 577406, ~: 556764)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 190.49ms (237.93ms CPU time)\n\nRan 5 tests for test/questions/QuestionsLaunchAudit.t.sol:QuestionsLaunchAuditTest\n[PASS] testFuzz_audit_silenceWaitsThroughTheRequestedValidity(uint32) (runs: 256, μ: 1924866, ~: 1924934)\n[PASS] test_audit_observerCannotDiscardAStillValidPanelAnswerAtTwelveHours() (gas: 1697141)\n[PASS] test_audit_publicAttestationCannotTakeTheOpenersTip() (gas: 1823442)\n[PASS] test_audit_rotatedSignerIsRejectedAndUnspentMeterRemainsRedeemable() (gas: 1622238)\n[PASS] test_audit_signerCodeWithoutERC1271RejectsPlainSignatures() (gas: 1717238)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 203.44ms (205.21ms CPU time)\n\nRan 18 tests for test/questions/QuestionsTips.t.sol:QuestionsTipsTest\n[PASS] testFuzz_returnedTip_keepsEveryMeterRuleIntact(uint256,uint256,uint256,uint256,uint256,bool) (runs: 256, μ: 2345971, ~: 2652990)\n[PASS] test_returnedTip_aFunderThatArrivesWhileTheRoundIsPendingSharesIt() (gas: 1153112)\n[PASS] test_returnedTip_afterTheMeterWasRefilledFromZero() (gas: 1635376)\n[PASS] test_returnedTip_isSharedByTheFundersInProportion() (gas: 1739836)\n[PASS] test_returnedTip_neverLiftsAShareAboveOneWei() (gas: 1058967)\n[PASS] test_returnedTip_withEveryFunderGone_belongsToNobody() (gas: 2012996)\n[PASS] test_tip_aFeedWithoutATipHoldsNothing() (gas: 2100525)\n[PASS] test_tip_eachRoundHasItsOwnOutcome() (gas: 3310847)\n[PASS] test_tip_followsTheRoundsStatus() (gas: 1177251)\n[PASS] test_tip_goesBackToTheMeterWhenTheRoundFails() (gas: 1031538)\n[PASS] test_tip_goesBackWhenARefusedRequestIsClosedInTwoSteps() (gas: 987335)\n[PASS] test_tip_isEarnedByTheKeeperThatHandsItsOwnAnswerIn() (gas: 1241199)\n[PASS] test_tip_isEarnedWhenTheIntakeDeliversTheAnswer() (gas: 1251491)\n[PASS] test_tip_isSetAsideWhenARoundOpens() (gas: 868456)\n[PASS] test_tip_ofARoundWhoseCallbackIsLateStaysWithTheOpener() (gas: 1499573)\n[PASS] test_tip_onlyAnsweredRoundsPay() (gas: 3749761)\n[PASS] test_tip_staysWithTheOpenerWhenAnotherAccountSubmits() (gas: 1343128)\n[PASS] test_tip_twoKeepersAreKeptApart() (gas: 1868333)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 201.24ms (211.77ms CPU time)\n\nRan 10 tests for test/questions/QuestionBody.t.sol:QuestionBodyTest\n[PASS] testFuzz_builderMatchesTheReference(bytes,bytes,uint64,uint64) (runs: 256, μ: 41295, ~: 41105)\n[PASS] testFuzz_contractSendsTheReferenceBody(uint256,uint32,uint8,bool) (runs: 256, μ: 1445156, ~: 1404771)\n[PASS] testFuzz_hasNumber_matchesOnlyTheSameNumber(uint256,uint256,bool) (runs: 256, μ: 27321, ~: 21712)\n[PASS] testFuzz_holdsPanelEvidence_matchesAPlainSearch(bytes,bytes,bool,uint8) (runs: 256, μ: 45224, ~: 36964)\n[PASS] test_builder_edges() (gas: 25217)\n[PASS] test_hasNumber_wantsTheWholeNumber() (gas: 126459)\n[PASS] test_holdsPanelEvidence_findsTheBytesAnywhere() (gas: 65728)\n[PASS] test_holdsPanelEvidence_readsNothingPastTheText() (gas: 361573)\n[PASS] test_prefixStart_isCanonicalForEveryType() (gas: 17449)\n[PASS] test_startsWith_endsWith() (gas: 41898)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 430.48ms (468.31ms CPU time)\n\nRan 9 tests for test/launch/LaunchManifest.t.sol:LaunchManifestTest\n[PASS] test_bytecodeWalk_findsWhatItLooksForAndSkipsPushData() (gas: 423263)\n[PASS] test_launch_constructorsMakeNoCallAndNoCodeCheck() (gas: 13865853)\n[PASS] test_launch_deploysInManifestOrderOnAnEmptyChain() (gas: 11091393)\n[PASS] test_launch_fitsOurSizeAndGasGates() (gas: 10661617)\nLogs:\n  Questions: runtime bytes: 22233\n  Questions: initcode bytes with arguments: 23738\n  Questions: creation gas: 4935805\n  JobsReport: runtime bytes: 9320\n  JobsReport: initcode bytes with arguments: 9746\n  JobsReport: creation gas: 2104841\n  Payroll: runtime bytes: 11846\n  Payroll: initcode bytes with arguments: 12848\n  Payroll: creation gas: 2650102\n  launch A: initcode bytes in all: 46332\n  launch A: gas at 240 a byte: 11119680\n  launch A: creation gas measured here: 9690748\n\n[PASS] test_launch_runtimeBytecodeHasNoForbiddenOpcode() (gas: 28291343)\n[PASS] test_launch_stateChangingFunctionsAreExactlyTheDocumentedOnes() (gas: 20759152)\n[PASS] test_manifest_everyArgumentIsWhatTheCodeExpects() (gas: 13483445)\n[PASS] test_manifest_feedIdsAreRecomputedFromTheFixtures() (gas: 4346548)\n[PASS] test_manifest_namesTheThreeContractsInOrder() (gas: 1546144)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 528.45ms (543.24ms CPU time)\n\nRan 11 tests for test/questions/HouseFeeds.t.sol:HouseFeedsTest\n[PASS] test_employersAcceptsAValidDeliveryAfterTwelveHours() (gas: 3212101)\n[PASS] test_employersIsJudgedByThePanelWithItsMethodPinned() (gas: 96658)\n[PASS] test_employersTakesAnswersFromTheIntakeOnlyAndOnlyWithTheQuorumMet() (gas: 3324032)\n[PASS] test_exampleBodiesAreWhatTheContractSends() (gas: 6565117)\n[PASS] test_feedIdsRecomputeFromTheirParts() (gas: 230824)\n[PASS] test_feedsAreAcceptedOnMainnet() (gas: 3129843)\n[PASS] test_feedsAreRefusedOffMainnet() (gas: 102440)\n[PASS] test_hiresSaysItCountsZeroValueTransfers() (gas: 277917)\n[PASS] test_prefixesAreTheCanonicalFormOfTheBody() (gas: 1725262)\n[PASS] test_recipesNameTheTokenAndThePayee() (gas: 385426)\n[PASS] test_theWaitsFitTheHouseFeeds() (gas: 199551)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 1.25s (41.07ms CPU time)\n\nRan 32 tests for test/payroll/PayrollStream.t.sol:PayrollStreamTest\n[PASS] testFuzz_booking_weightedEndIsBetweenTheTwoTimes(uint256,uint256) (runs: 256, μ: 300360, ~: 304680)\n[PASS] test_booking_aLargeBookingStillTakesAboutSevenDays() (gas: 132352)\n[PASS] test_booking_afterTheStreamEnded_takesSevenDays() (gas: 131796)\n[PASS] test_booking_anOldLargeCapDoesNotOutliveItsBacklog() (gas: 11173291)\n[PASS] test_booking_hourlyDustDoesNotStretchTheStream() (gas: 25305728)\n[PASS] test_booking_joinsTheStreamAtTheWeightedEndTime() (gas: 334841)\n[PASS] test_booking_neverPushesTheEndPastSevenDaysOrBeforeTheOldEnd() (gas: 149934)\n[PASS] test_booking_ofDustAsTheStreamEndsDoesNotTrapItsLastHour() (gas: 11566153)\n[PASS] test_booking_ofDustCannotHoldBackVestedMoney() (gas: 3716746)\n[PASS] test_booking_ofDustDoesNotMoveTheEnd() (gas: 594964)\n[PASS] test_booking_ofDustWithABacklogWaitingLeavesItReachable() (gas: 30811976)\n[PASS] test_booking_steadyTrafficNeverDelaysMoneyPastSevenDays() (gas: 63038416)\n[PASS] test_drip_afterTheStreamEndsTheBacklogStillLeavesInCappedCalls() (gas: 10953832)\n[PASS] test_drip_deliversTheWholeStreamAndNoMore() (gas: 24805393)\n[PASS] test_drip_isCappedAtOneHourOfStream() (gas: 592332)\n[PASS] test_drip_nothingHasVestedInTheBookingBlock() (gas: 68673)\n[PASS] test_drip_oneWeiStreamCanBeEmptied() (gas: 370631)\n[PASS] test_drip_revertsInsideTheTenMinuteGap() (gas: 188160)\n[PASS] test_drip_revertsWhenTheVaultAnswersTooShort() (gas: 675238)\n[PASS] test_drip_revertsWhenTheVaultHasNoCode() (gas: 372718)\n[PASS] test_drip_revertsWhenTheVaultIsOverAnotherAsset() (gas: 700400)\n[PASS] test_drip_revertsWhenTheVaultReverts() (gas: 679117)\n[PASS] test_drip_sendsWhatVestedToSIMD() (gas: 307982)\n[PASS] test_drip_waitsWhileTheVaultHasNoStakers() (gas: 1667968)\n[PASS] test_drip_withNoRevenueSendsNothing() (gas: 107545)\n[PASS] test_stream_viewAgreesWithDrip() (gas: 132421)\n[PASS] test_stuckVaultDoesNotBlockTheRestOfPayroll() (gas: 894580)\n[PASS] test_visitor_aStakerOfTheSameSizeWhoStaysGetsTheSame() (gas: 11718769)\n[PASS] test_visitor_oneVisitTakesItsShareOfOneCappedDrip() (gas: 377150)\n[PASS] test_visitor_repeatedOverAWholeStreamTakesItsProRataShareAndNoMore() (gas: 39974689)\nLogs:\n  the stream (IMD): 168.000000000000000000\n  the visitor's gain (IMD): 83.999999999999999832\n  the gain of the staker who stayed (IMD): 84.000000000000000167\n\n[PASS] test_visitor_withTheHoldAStakeDripLeaveTransactionReverts() (gas: 528274)\n[PASS] test_visitor_withoutTheHoldTheSameShareNeedsNoCapitalAtAll() (gas: 28830211)\nLogs:\n  taken with borrowed IMD and no hold (IMD): 82.271412149542436809\n\nSuite result: ok. 32 passed; 0 failed; 0 skipped; finished in 1.24s (163.17ms CPU time)\n\nRan 40 tests for test/payroll/PayrollTips.t.sol:PayrollTipsTest\n[PASS] testFuzz_sweepTip_everyTipKeepsItsOwnWait(uint32[6],uint64[6]) (runs: 256, μ: 897195, ~: 863648)\n[PASS] testFuzz_sweepTip_lowGasNeverMakesAnOwnedSeatLookOwnerless(uint256) (runs: 256, μ: 11041079, ~: 12469184)\n[PASS] testFuzz_sweepTip_lowGasNeverSweepsABoundAgent(uint256) (runs: 256, μ: 300028, ~: 316868)\n[PASS] test_adapterRead_anAdapterBeyondItsAllowanceIsNotHeard() (gas: 203651)\n[PASS] test_adapterRead_anAdapterWithinItsAllowanceIsHeard() (gas: 355503)\n[PASS] test_adapterRead_reportsTooLittleGas() (gas: 179013)\n[PASS] test_claimTip_nothingOwedReturnsZeroWithoutAskingTheAdapter() (gas: 108272)\n[PASS] test_claimTip_paysTheOwnerOfTheBoundSeat() (gas: 440040)\n[PASS] test_claimTip_paysTipsOfEveryAge() (gas: 538531)\n[PASS] test_claimTip_paysWhoeverOwnsTheSeatNow() (gas: 281786)\n[PASS] test_claimTip_revertsForAnUnboundAgent() (gas: 167013)\n[PASS] test_claimTip_revertsWhenBoundToAnotherToken() (gas: 233637)\n[PASS] test_claimTip_revertsWhenTheAdapterReverts() (gas: 333018)\n[PASS] test_claimTip_revertsWhenTheSeatHasNoOwner() (gas: 347811)\n[PASS] test_claimTip_revertsWhenTheTokenIdIsNotASeat() (gas: 235271)\n[PASS] test_claimTip_treatsMalformedAnswersAsNotClaimable() (gas: 1052354)\n[PASS] test_claimTip_whenTheAdapterHasNoCode() (gas: 207230)\n[PASS] test_sweepTip_aLaterTipDoesNotDelayAnEarlierOne() (gas: 352585)\n[PASS] test_sweepTip_aSeatThatHasItsOwnerBackKeepsTheTip() (gas: 352522)\n[PASS] test_sweepTip_aTipWaitsBetween180And360Days() (gas: 399663)\n[PASS] test_sweepTip_afterAClaimANewTipWaitsItsOwnTime() (gas: 466911)\n[PASS] test_sweepTip_agentBoundInTimeKeepsItsTip() (gas: 375487)\n[PASS] test_sweepTip_movesAnUnboundAgentsTipsToTheSeatPoolOnceTheyHaveWaited() (gas: 448020)\n[PASS] test_sweepTip_neverTakesATipThatCanBeClaimed() (gas: 280940)\n[PASS] test_sweepTip_nothingOwedReturnsZero() (gas: 37204)\n[PASS] test_sweepTip_oneWeiTipsCannotHoldOlderTipsOutOfTheSeatPool() (gas: 862499)\n[PASS] test_sweepTip_reportsTooLittleGasAfterAFailedOwnerRead() (gas: 5241802)\n[PASS] test_sweepTip_takesATipBoundToASeatNobodyOwns() (gas: 486188)\n[PASS] test_sweepTip_takesATipBoundToAnotherToken() (gas: 401019)\n[PASS] test_sweepTip_takesOnlyWhatHasWaited() (gas: 563634)\n[PASS] test_tip_acceptsAnyIds() (gas: 230335)\n[PASS] test_tip_addsUpAcrossPeriods() (gas: 502174)\n[PASS] test_tip_duplicateIdsAreCreditedOncePerMention() (gas: 283107)\n[PASS] test_tip_emptyListSendsEverythingToTheSeatPool() (gas: 339394)\n[PASS] test_tip_onlyTheFirstSixteenIdsShare() (gas: 636368)\n[PASS] test_tip_remainderJoinsTheSeatPool() (gas: 403523)\n[PASS] test_tip_revertsOnlyWhenTheTransferDoes() (gas: 45044)\n[PASS] test_tip_splitsEquallyAndIsNotBookedAsRevenue() (gas: 374131)\n[PASS] test_tip_tooSmallToSplitGoesToTheSeatPool() (gas: 311592)\n[PASS] test_tip_zeroDoesNothing() (gas: 60881)\nSuite result: ok. 40 passed; 0 failed; 0 skipped; finished in 1.21s (1.36s CPU time)\n\nRan 7 tests for test/payroll/PayrollFuzz.t.sol:PayrollFuzzTest\n[PASS] testFuzz_book_splitsExactlyLikePay(uint256) (runs: 256, μ: 646707, ~: 661902)\n[PASS] testFuzz_feedBudget_waitsBetweenOneAndTwoFortnights(uint96,uint32) (runs: 256, μ: 511106, ~: 505953)\n[PASS] testFuzz_feeds_neverFundBeyondTheRunwayOrTheBudget(uint256,uint256,uint64[3]) (runs: 256, μ: 1731162, ~: 1757683)\n[PASS] testFuzz_split_holdsOverManyBookings(uint96[8]) (runs: 256, μ: 1115745, ~: 1128550)\n[PASS] testFuzz_split_isExactAndFavoursStakers(uint256) (runs: 256, μ: 432023, ~: 439575)\n[PASS] testFuzz_stream_paysEverythingAndNeverMoreThanTheCap(uint96[6],uint32[6]) (runs: 256, μ: 12593559, ~: 12599194)\n[PASS] testFuzz_tip_conservesEveryWei(uint256,uint8,uint256) (runs: 256, μ: 471518, ~: 467081)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 1.28s (4.26s CPU time)\n\nRan 12 tests for test/questions/QuestionsAbandon.t.sol:QuestionsAbandonTest\n[PASS] test_abandon_aLateAnswerThatMissedItsCallbackCanStillBeSubmitted() (gas: 1377187)\n[PASS] test_abandon_afterACallbackThatFailed() (gas: 1179833)\n[PASS] test_abandon_afterTheFullSilenceDeadline() (gas: 1131780)\n[PASS] test_abandon_cannotUndoAnAnswer() (gas: 1100958)\n[PASS] test_abandon_doesNotDependOnTheIntakeBehaving() (gas: 9763481)\n[PASS] test_abandon_failStreakSaturates() (gas: 111009761)\n[PASS] test_abandon_theFullSilenceDeadlineIsAlwaysEnough() (gas: 1611003)\n[PASS] test_abandon_theWaitIsNotCarriedIntoTheNextRound() (gas: 2959961)\n[PASS] test_abandon_thenTheFeedAsksAgain() (gas: 1637874)\n[PASS] test_abandon_thirtyMinutesAfterCompletionIsSeen() (gas: 1991044)\n[PASS] test_abandon_withNothingPending_reverts() (gas: 1611777)\n[PASS] test_waits_areTheValuesFixedAtLaunch() (gas: 27373)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 1.28s (107.71ms CPU time)\n\nRan 6 tests for test/payroll/JobsReportFuzz.t.sol:JobsReportFuzzTest\n[PASS] testFuzz_counts_pairExactlyByTheMostlySharedRule(uint256) (runs: 256, μ: 2394432, ~: 2404299)\n[PASS] testFuzz_crown_anyAttestedBytesEndCleanly(bytes) (runs: 256, μ: 180165, ~: 179892)\n[PASS] testFuzz_crown_anyListShapedBytesEndCleanly(uint256,uint256,uint256[5],bool,bool) (runs: 256, μ: 201969, ~: 182713)\n[PASS] testFuzz_crown_onlyTheAttestedBytesAreAccepted(address[],bytes) (runs: 256, μ: 205039, ~: 207013)\n[PASS] testFuzz_crown_topThreeAreTheFirstThreeOfTheList(address[]) (runs: 256, μ: 383128, ~: 378492)\n[PASS] testFuzz_print_matchesTheRules(uint256) (runs: 256, μ: 1141406, ~: 1048996)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 1.28s (2.77s CPU time)\n\nRan 1 test for test/payroll/invariant/PayrollInvariant.t.sol:PayrollInvariantTest\n[PASS]\nPayrollInvariantTest invariants:\n[PASS] invariant_everyPayoutReachedItsPayee\n[PASS] invariant_noCallMisbehaved\n[PASS] invariant_noSeatTakesMoreThanItsShare\n[PASS] invariant_theBalanceCoversEverythingOwed\n[PASS] invariant_theSplitAddsUp\n PayrollInvariantTest invariants (runs: 64, calls: 3072, reverts: 157)\n\n╭----------------+-----------------------+-------+---------+----------╮\n| Contract       | Selector              | Calls | Reverts | Discards |\n+=====================================================================+\n| PayrollHandler | bindAgent             | 160   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | book                  | 150   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | breakSeat             | 145   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | changeQuestions       | 159   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | claimSeat             | 147   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | claimSeats            | 157   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | claimTip              | 145   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | defundMeterAsStranger | 140   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | drip                  | 150   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | emptyVault            | 158   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | fundFeeds             | 167   | 157     | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | fundMeterAsStranger   | 143   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | moveSeat              | 150   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | pay                   | 138   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | refillVault           | 164   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | spendMeter            | 141   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | sweepTip              | 169   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | tip                   | 183   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | transferPlainly       | 167   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | wait                  | 139   | 0       | 0        |\n╰----------------+-----------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.41s (1.41s CPU time)\n\nRan 2 tests for test/questions/QuestionsInvariant.t.sol:QuestionsInvariantTest\n[PASS]\nQuestionsInvariantTest invariants:\n[PASS] invariant_Q1_onePendingRoundPerFeed\n[PASS] invariant_Q2_eachAttestationAnswersAFeedOnce\n[PASS] invariant_Q3_contiguousWindowsTile\n[PASS] invariant_everyHolderCanAlwaysDefund\n[PASS] invariant_metersAddUpToTheContractsBalance\n[PASS] invariant_sharesNeverClaimMoreThanTheMeter\n[PASS] invariant_tipsAreOwedForAnswersOnly\n QuestionsInvariantTest invariants (runs: 64, calls: 3072, reverts: 0)\n\n╭------------------+-----------+-------+---------+----------╮\n| Contract         | Selector  | Calls | Reverts | Discards |\n+===========================================================+\n| QuestionsHandler | abandon   | 216   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | answer    | 235   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | collect   | 232   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | defund    | 246   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | donate    | 207   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | fund      | 214   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | fundFor   | 210   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | moveGate  | 211   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | movePrice | 247   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | pass      | 213   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | refuse    | 220   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | replay    | 196   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | request   | 211   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | twin      | 214   | 0       | 0        |\n╰------------------+-----------+-------+---------+----------╯\n\n[PASS] test_handlerReachesEveryState() (gas: 50204604)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 6.28s (6.31s CPU time)\n\nRan 48 test suites in 6.29s (17.72s CPU time): 502 tests passed, 0 failed, 0 skipped (502 total tests)\n","passed":true},{"durationMs":145,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"JobsReport.crown(uint64,bytes)\",\"JobsReport.print()\",\"Payroll.book()\",\"Payroll.claimSeat(uint256)\",\"Payroll.claimSeats(uint256[])\",\"Payroll.claimTip(uint256)\",\"Payroll.drip()\",\"Payroll.fundFeeds()\",\"Payroll.pay(uint256,bytes32)\",\"Payroll.sweepTip(uint256)\",\"Payroll.tip(uint256[],uint256)\",\"Questions.abandon(bytes32)\",\"Questions.collectTips()\",\"Questions.createFeed((bytes32,uint64,uint8,uint16,uint16,uint16,uint32,uint32,uint32,uint16,bool,bool,uint96,uint96,uint8,address,uint256,bytes),bytes,bytes)\",\"Questions.defund(bytes32,uint256)\",\"Questions.fund(bytes32,uint256)\",\"Questions.fundFor(bytes32,uint256,address)\",\"Questions.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"Questions.request(bytes32)\",\"Questions.reveal(bytes32,uint64,bytes)\",\"Questions.submit(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\"],\"files\":{\".gitignore\":12,\"ADAPTATION.md\":163,\"LICENSE\":21,\"README.md\":269,\"docs/AUDITS.md\":298,\"docs/DEVIATIONS.md\":251,\"docs/LAUNCH.md\":813,\"docs/THREATS.md\":553,\"foundry.toml\":43,\"remappings.txt\":2,\"src/interfaces/IPayroll.sol\":41,\"src/interfaces/IQuestions.sol\":57,\"src/interfaces/external/IIntake.sol\":55,\"src/interfaces/external/ISeatAdapter.sol\":21,\"src/interfaces/external/Mainnet.sol\":40,\"src/payroll/JobsReport.sol\":680,\"src/payroll/Payroll.sol\":1243,\"src/questions/OracleAttestation.sol\":221,\"src/questions/QuestionBody.sol\":138,\"src/questions/Questions.sol\":1390,\"test/fixtures/payroll/attested-address-list.json\":15,\"test/fixtures/payroll/mainnet-seat-binding.json\":16,\"test/fixtures/questions/feeds/employers.json\":92,\"test/fixtures/questions/feeds/hires.json\":76,\"test/fixtures/questions/feeds/payrolls.json\":75,\"test/fixtures/questions/intake/requested.json\":53,\"test/fixtures/questions/proofs/employers-first-attempt.intake.json\":1,\"test/fixtures/questions/proofs/employers-first-attempt.oracle.json\":1,\"test/fixtures/questions/proofs/employers.attestation.json\":1,\"test/fixtures/questions/proofs/employers.intake.json\":1,\"test/fixtures/questions/proofs/employers.oracle.json\":1,\"test/fixtures/questions/proofs/hires.attestation.json\":1,\"test/fixtures/questions/proofs/hires.intake.json\":1,\"test/fixtures/questions/proofs/hires.oracle.json\":1,\"test/fixtures/questions/proofs/index.json\":190,\"test/fixtures/questions/proofs/payrolls.attestation.json\":1,\"test/fixtures/questions/proofs/payrolls.intake.json\":1,\"test/fixtures/questions/proofs/payrolls.oracle.json\":1,\"test/fixtures/questions/requests/01604a11-d04f-4960-9b1d-a3811a000048.json\":1,\"test/fixtures/questions/requests/03f89e74-3db8-4c10-8fa8-d3424c9a18d4.json\":1,\"test/fixtures/questions/requests/05ce467c-1900-4a32-87ec-70d499f98536.json\":1,\"test/fixtures/questions/requests/0e21ab1a-ca72-4618-b814-d1909aeb5437.json\":1,\"test/fixtures/questions/requests/13766f38-ef02-45f1-b168-7107d657ee44.json\":1,\"test/fixtures/questions/requests/18b11d16-705c-494e-b59a-22c6ecdb4cd1.json\":1,\"test/fixtures/questions/requests/286b7948-ba7c-41ae-9cc9-7ba15f497876.json\":1,\"test/fixtures/questions/requests/383a398f-7fc1-4a43-8c88-37573e64c79d.json\":1,\"test/fixtures/questions/requests/4886cfab-425d-4130-bc58-a764627f3b26.json\":1,\"test/fixtures/questions/requests/54d11aa3-3603-45a6-9e7d-abf63e359c29.json\":1,\"test/fixtures/questions/requests/709556f3-b5c8-4034-a780-9e3a34eed0ee.json\":1,\"test/fixtures/questions/requests/8f76e26f-125d-4b9f-9fa1-7671699256d9.json\":1,\"test/fixtures/questions/requests/954eba86-a232-4fed-b3ea-e629ebc1e649.json\":1,\"test/fixtures/questions/requests/9b4aa012-184e-4b0b-8c6f-fab11f0cb9e6.json\":1,\"test/fixtures/questions/requests/a4d33e90-1c2c-49bd-a4aa-2d8e3f6570f3.json\":1,\"test/fixtures/questions/requests/b8c51269-16c2-405f-91f9-50722fdedda9.json\":1,\"test/fixtures/questions/requests/c5e21f11-5172-4f9b-a506-9babcdfa47c2.json\":1,\"test/fixtures/questions/requests/c72be526-171a-41db-8444-bdde0205f87f.json\":1,\"test/fixtures/questions/requests/cd04b41d-3f6c-4fcd-a1c0-865a62fbd102.json\":1,\"test/fixtures/questions/requests/d5b04a1c-cefc-4177-98b8-b5908efec55e.json\":1,\"test/fixtures/questions/requests/dbcac6c2-6328-47a9-8e07-4c7b55f78e45.json\":1,\"test/fixtures/questions/requests/dcc0a889-47e2-4320-972e-6543c96eb98d.json\":1,\"test/fixtures/questions/requests/f9e472ad-8963-4c3f-9871-b14b4160a8af.json\":1,\"test/fixtures/questions/requests/index.json\":401,\"test/fixtures/questions/tools/build_conformance.py\":97,\"test/fixtures/questions/tools/build_house_feeds.py\":372,\"test/fixtures/questions/tools/build_request_fixtures.py\":74,\"test/fixtures/questions/tools/extract_reference.py\":32,\"test/fixtures/questions/tools/fetch_requests.py\":29,\"test/fixtures/questions/tools/qlib.py\":104,\"test/launch/LaunchKit.sol\":199,\"test/launch/LaunchManifest.t.sol\":340,\"test/launch/LaunchRunbook.t.sol\":311,\"test/launch/fork/LaunchRehearsal.fork.t.sol\":508,\"test/payroll/JobsReport.t.sol\":1093,\"test/payroll/JobsReportFuzz.t.sol\":258,\"test/payroll/JobsReportSetup.sol\":92,\"test/payroll/PayrollBooking.t.sol\":326,\"test/payroll/PayrollFeeds.t.sol\":747,\"test/payroll/PayrollFixture.t.sol\":121,\"test/payroll/PayrollFuzz.t.sol\":249,\"test/payroll/PayrollGas.t.sol\":253,\"test/payroll/PayrollLaunchAudit.t.sol\":111,\"test/payroll/PayrollScenario.t.sol\":97,\"test/payroll/PayrollSeats.t.sol\":293,\"test/payroll/PayrollSetup.sol\":176,\"test/payroll/PayrollStream.t.sol\":670,\"test/payroll/PayrollTips.t.sol\":650,\"test/payroll/audit/AuditReports.t.sol\":492,\"test/payroll/fork/LaunchAFork.t.sol\":268,\"test/payroll/fork/PayrollFork.t.sol\":320,\"test/payroll/integration/LaunchA.t.sol\":570,\"test/payroll/invariant/PayrollHandler.sol\":556,\"test/payroll/invariant/PayrollInvariant.t.sol\":185,\"test/payroll/mocks/MockSeats.sol\":132,\"test/payroll/mocks/MockTokens.sol\":212,\"test/payroll/mocks/QuestionsRig.sol\":106,\"test/questions/HouseFeedProofs.t.sol\":487,\"test/questions/HouseFeeds.t.sol\":335,\"test/questions/OracleConsumerConformance.t.sol\":146,\"test/questions/QuestionBody.t.sol\":263,\"test/questions/QuestionHashFixtures.t.sol\":153,\"test/questions/QuestionsAbandon.t.sol\":404,\"test/questions/QuestionsAnswers.t.sol\":996,\"test/questions/QuestionsCallbackGas.t.sol\":174,\"test/questions/QuestionsFeeds.t.sol\":573,\"test/questions/QuestionsFixture.sol\":246,\"test/questions/QuestionsInvariant.t.sol\":790,\"test/questions/QuestionsLaunchAudit.t.sol\":144,\"test/questions/QuestionsMeter.t.sol\":503,\"test/questions/QuestionsRequest.t.sol\":879,\"test/questions/QuestionsSharedAnswers.t.sol\":239,\"test/questions/QuestionsTips.t.sol\":560,\"test/questions/RealAttestations.t.sol\":229,\"test/questions/fork/IIntakeV2.sol\":29,\"test/questions/fork/QuestionsIntake.fork.t.sol\":418,\"test/questions/lib/CanonicalQuestion.sol\":106,\"test/questions/mocks/IntakeDelivery.sol\":42,\"test/questions/mocks/MockIMD.sol\":31,\"test/questions/mocks/MockIntake.sol\":149,\"test/questions/mocks/Oddities.sol\":240,\"test/questions/mocks/QuestionsHarness.sol\":32,\"test/questions/mocks/QuestionsVectorHarness.sol\":42,\"test/scaffold/Interfaces.t.sol\":16},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":10204,"exitCode":0,"name":"slither","output":"[high/medium] weak-prng at src/payroll/Payroll.sol:926: Payroll._creditSeatPool(uint256) (src/payroll/Payroll.sol#926-933) uses a weak PRNG: \"seatCarry = sum % SEAT_COUNT (src/payroll/Payroll.sol#931)\"\n[high/medium] reentrancy-balance at src/payroll/Payroll.sol:1159: Reentrancy in Payroll._fund(bytes32,uint256) (src/payroll/Payroll.sol#1159-1189):\n[medium/medium] divide-before-multiply at src/payroll/Payroll.sol:428: Payroll.tip(uint256[],uint256) (src/payroll/Payroll.sol#428-452) performs a multiplication on the result of a division:\n[medium/high] incorrect-equality at src/payroll/Payroll.sol:669: Payroll.sweepTip(uint256) (src/payroll/Payroll.sol#669-695) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/payroll/Payroll.sol:999: Payroll._unvestedNow(Payroll.Clock) (src/payroll/Payroll.sol#999-1007) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/questions/Questions.sol:1183: Questions._abandonStep(Questions.FeedState,Questions.Round,uint32) (src/questions/Questions.sol#1183-1203) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/questions/Questions.sol:1067: Questions.canRequest(bytes32) (src/questions/Questions.sol#1067-1074) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/questions/Questions.sol:874: Questions.abandon(bytes32) (src/questions/Questions.sol#874-900) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/payroll/Payroll.sol:428: Payroll.tip(uint256[],uint256) (src/payroll/Payroll.sol#428-452) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/payroll/Payroll.sol:948: Payroll._creditTip(uint256,uint128,uint64) (src/payroll/Payroll.sol#948-962) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/questions/Questions.sol:631: Questions._fund(bytes32,uint256,address) (src/questions/Questions.sol#631-678) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/payroll/Payroll.sol:518: Payroll.drip() (src/payroll/Payroll.sol#518-537) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/payroll/Payroll.sol:1038: Payroll._levelStream(uint256) (src/payroll/Payroll.sol#1038-1062) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/payroll/Payroll.sol:966: Payroll._agedTip(Payroll.TipSlot,uint64) (src/payroll/Payroll.sol#966-979) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/payroll/Payroll.sol:1038: Payroll._levelStream(uint256) (src/payroll/Payroll.sol#1038-1062) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/questions/Questions.sol:1183: Questions._abandonStep(Questions.FeedState,Questions.Round,uint32) (src/questions/Questions.sol#1183-1203) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/payroll/Payroll.sol:628: Payroll.claimTip(uint256) (src/payroll/Payroll.sol#628-643) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/questions/Questions.sol:631: Questions._fund(bytes32,uint256,address) (src/questions/Questions.sol#631-678) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/questions/Questions.sol:1141: Questions._readiness(Questions.Feed) (src/questions/Questions.sol#1141-1160) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/payroll/Payroll.sol:1107: Payroll._ageFeedBudget() (src/payroll/Payroll.sol#1107-1121) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/payroll/Payroll.sol:669: Payroll.sweepTip(uint256) (src/payroll/Payroll.sol#669-695) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/payroll/Payroll.sol:398: Payroll.pay(uint256,bytes32) (src/payroll/Payroll.sol#398-404) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/questions/Questions.sol:874: Questions.abandon(bytes32) (src/questions/Questions.sol#874-900) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/payroll/Payroll.sol:669: Payroll.sweepTip(uint256) (src/payroll/Payroll.sol#669-695) uses a dangerous strict equality:\n[medium/medium] reentrancy-no-eth at src/questions/Questions.sol:731: Reentrancy in Questions.request(bytes32) (src/questions/Questions.sol#731-784):\n[medium/medium] reentrancy-no-eth at src/payroll/Payroll.sol:1159: Reentrancy in Payroll._fund(bytes32,uint256) (src/payroll/Payroll.sol#1159-1189):\n[medium/medium] reentrancy-no-eth at src/payroll/Payroll.sol:732: Reentrancy in Payroll.fundFeeds() (src/payroll/Payroll.sol#732-767):\n[medium/medium] reentrancy-no-eth at src/payroll/Payroll.sol:732: Reentrancy in Payroll.fundFeeds() (src/payroll/Payroll.sol#732-767):\n[medium/medium] unused-return at src/payroll/JobsReport.sol:307: JobsReport._readPayrolls(JobsReport.Progress,uint256) (src/payroll/JobsReport.sol#307-338) ignores return value by (status,amount,fromBlock,toBlock,None) = QUESTIONS.roundOf(PAYROLLS_FEED,round) (src/payroll/JobsReport.sol#318-319)\n[medium/medium] unused-return at src/payroll/JobsReport.sol:487: JobsReport.crown(uint64,bytes) (src/payroll/JobsReport.sol#487-513) ignores return value by (status,stored,fromBlock,toBlock,None) = QUESTIONS.roundOf(EMPLOYERS_FEED,round) (src/payroll/JobsReport.sol#492-493)\n[medium/medium] unused-return at src/payroll/JobsReport.sol:364: JobsReport._readHires(JobsReport.Progress,uint256) (src/payroll/JobsReport.sol#364-393) ignores return value by (status,count,fromBlock,toBlock,None) = QUESTIONS.roundOf(HIRES_FEED,round) (src/payroll/JobsReport.sol#375-376)\n[low/medium] calls-loop at src/payroll/JobsReport.sol:364: JobsReport._readHires(JobsReport.Progress,uint256) (src/payroll/JobsReport.sol#364-393) has external calls inside a loop: (status,count,fromBlock,toBlock,None) = QUESTIONS.roundOf(HIRES_FEED,round) (src/payroll/JobsReport.sol#375-376)\n[low/medium] calls-loop at src/payroll/JobsReport.sol:307: JobsReport._readPayrolls(JobsReport.Progress,uint256) (src/payroll/JobsReport.sol#307-338) has external calls inside a loop: (status,amount,fromBlock,toBlock,None) = QUESTIONS.roundOf(PAYROLLS_FEED,round) (src/payroll/JobsReport.sol#318-319)\n[low/medium] reentrancy-benign at src/questions/Questions.sol:731: Reentrancy in Questions.request(bytes32) (src/questions/Questions.sol#731-784):\n[low/medium] reentrancy-benign at src/payroll/Payroll.sol:732: Reentrancy in Payroll.fundFeeds() (src/payroll/Payroll.sol#732-767):\n[low/medium] timestamp at src/payroll/Payroll.sol:518: Payroll.drip() (src/payroll/Payroll.sol#518-537) uses timestamp for comparisons\n[low/medium] timestamp at src/questions/Questions.sol:874: Questions.abandon(bytes32) (src/questions/Questions.sol#874-900) uses timestamp for comparisons\n[low/medium] timestamp at src/payroll/Payroll.sol:628: Payroll.claimTip(uint256) (src/payroll/Payroll.sol#628-643) uses timestamp for comparisons\n[low/medium] timestamp at src/questions/Questions.sol:1173: Questions._submitOpen(Questions.Round) (src/questions/Questions.sol#1173-1176) uses timestamp for comparisons\n[low/medium] timestamp at src/payroll/Payroll.sol:669: Payroll.sweepTip(uint256) (src/payroll/Payroll.sol#669-695) uses timestamp for comparisons\n[low/medium] timestamp at src/payroll/Payroll.sol:948: Payroll._creditTip(uint256,uint128,uint64) (src/payroll/Payroll.sol#948-962) uses timestamp for comparisons\n[low/medium] timestamp at src/payroll/Payroll.sol:813: Payroll.stream() (src/payroll/Payroll.sol#813-836) uses timestamp for comparisons\n[low/medium] timestamp at src/payroll/Payroll.sol:926: Payroll._creditSeatPool(uint256) (src/payroll/Payroll.sol#926-933) uses timestamp for comparisons\n[low/medium] timestamp at src/payroll/Payroll.sol:902: Payroll._book(uint256) (src/payroll/Payroll.sol#902-921) uses timestamp for comparisons\n[low/medium] timestamp at src/payroll/JobsReport.sol:487: JobsReport.crown(uint64,bytes) (src/payroll/JobsReport.sol#487-513) uses timestamp for comparisons\n[low/medium] timestamp at src/questions/OracleAttestation.sol:157: OracleAttestationConsumer._verifyAttestation(OracleAttestation.Attestation,bytes) (src/questions/OracleAttestation.sol#157-165) uses timestamp for comparisons\n[low/medium] timestamp at src/payroll/Payroll.sol:1107: Payroll._ageFeedBudget() (src/payroll/Payroll.sol#1107-1121) uses timestamp for comparisons\n[low/medium] timestamp at src/payroll/Payroll.sol:732: Payroll.fundFeeds() (src/payroll/Payroll.sol#732-767) uses timestamp for comparisons\n[low/medium] timestamp at src/payroll/Payroll.sol:966: Payroll._agedTip(Payroll.TipSlot,uint64) (src/payroll/Payroll.sol#966-979) uses timestamp for comparisons\n[low/medium] timestamp at src/payroll/Payroll.sol:411: Payroll.book() (src/payroll/Payroll.sol#411-414) uses timestamp for comparisons\n[low/medium] timestamp at src/payroll/Payroll.sol:1083: Payroll._agedFeedBudget() (src/payroll/Payroll.sol#1083-1102) uses timestamp for comparisons\n[low/medium] timestamp at src/payroll/Payroll.sol:999: Payroll._unvestedNow(Payroll.Clock) (src/payroll/Payroll.sol#999-1007) uses timestamp for comparisons\n[low/medium] timestamp at src/payroll/Payroll.sol:983: Payroll._nextRipeAt(Payroll.TipSlot,uint64) (src/payroll/Payroll.sol#983-987) uses timestamp for comparisons\n[low/medium] timestamp at src/payroll/Payroll.sol:1038: Payroll._levelStream(uint256) (src/payroll/Payroll.sol#1038-1062) uses timestamp for comparisons\n[low/medium] timestamp at src/questions/Questions.sol:1183: Questions._abandonStep(Questions.FeedState,Questions.Round,uint32) (src/questions/Questions.sol#1183-1203) uses timestamp for comparisons\n[low/medium] timestamp at src/questions/Questions.sol:1099: Questions.canSubmit(bytes32) (src/questions/Questions.sol#1099-1103) uses timestamp for comparisons","passed":true},{"durationMs":916,"exitCode":0,"name":"aderyn","output":"[high] reentrancy-state-change at src/payroll/JobsReport.sol:492: Reentrancy: State change after external call (3 places)\n[high] storage-array-memory-edit at src/payroll/Payroll.sol:629: Storage Array Edited with Memory (7 places)\n[high] unsafe-casting at src/payroll/Payroll.sol:1059: Unsafe Casting of integers (2 places)\n[low] costly-loop at src/payroll/JobsReport.sol:312: Costly operations inside loop (5 places)\n[low] internal-function-used-once at src/questions/QuestionBody.sol:77: Internal Function Used Only Once\n[low] large-numeric-literal at src/payroll/Payroll.sol:173: Large Numeric Literal (5 places)\n[low] literal-instead-of-constant at src/payroll/JobsReport.sol:498: Literal Instead of Constant (14 places)\n[low] local-variable-shadowing at src/payroll/JobsReport.sol:117: Local Variable Shadows State Variable (5 places)\n[low] require-revert-in-loop at src/payroll/JobsReport.sol:528: Loop Contains `require`/`revert` (2 places)\n[low] uninitialized-local-variable at src/questions/QuestionBody.sol:131: Uninitialized Local Variable","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"4792cda19312782eb6de7aa23cae5c41a447559f40bde37e500f64e4d8a3cddf","verifiedTreeHash":"1679d62b3a8c02f5c648a9cd70143701a514c540","verifierVersion":"0.1.0+327e1e9f"},{"checks":[{"durationMs":318677,"exitCode":0,"name":"build","output":"Compiling 119 files with Solc 0.8.26\nSolc 0.8.26 finished in 318.35s\nCompiler run successful!\n","passed":true},{"durationMs":10318,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 3 tests for test/payroll/PayrollGas.t.sol:PayrollFirstCallGasTest\n[PASS] test_gas_theFirstBookEver() (gas: 303422)\nLogs:\n  book, the first ever: 237338\n\n[PASS] test_gas_theFirstPayEver() (gas: 271088)\nLogs:\n  pay, the first ever: 263606\n\n[PASS] test_gas_theFirstTipEverToSixteenAgents() (gas: 516201)\nLogs:\n  tip, the first ever, 16 new ids and a remainder: 506058\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 1.35ms (227.60µs CPU time)\n\nRan 1 test for test/questions/QuestionsCallbackGas.t.sol:CallbackGasAddressTest\n[PASS] test_callbackGas_staysUnderTheGate() (gas: 306636)\nLogs:\n  callback gas (address): 115833\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.50ms (371.40µs CPU time)\n\nRan 1 test for test/questions/QuestionsCallbackGas.t.sol:CallbackGasUint256Test\n[PASS] test_callbackGas_staysUnderTheGate() (gas: 306647)\nLogs:\n  callback gas (uint256): 115796\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.56ms (353.94µs CPU time)\n\nRan 2 tests for test/payroll/audit/AuditReports.t.sol:AuditBudgetBoundaryTest\n[PASS] test_report1_finding1_aBookingAtTheBoundaryReleasesNothing() (gas: 1203427)\n[PASS] test_report1_finding1_aOneWeiBookingAtTheBoundaryDoesNotStarveTheMeters() (gas: 1150062)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 2.48ms (935.95µs CPU time)\n\nRan 1 test for test/scaffold/Interfaces.t.sol:InterfacesCompileTest\n[PASS] test_oracleActionIsTheRightPaddedString() (gas: 217)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 147.38µs (22.83µs CPU time)\n\nRan 1 test for test/questions/QuestionsCallbackGas.t.sol:CallbackGasBoolNoTest\n[PASS] test_callbackGas_staysUnderTheGate() (gas: 286674)\nLogs:\n  callback gas (bool): 95922\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 961.28µs (135.19µs CPU time)\n\nRan 6 tests for test/payroll/PayrollLaunchAudit.t.sol:PayrollLaunchAuditTest\n[PASS] test_audit_batchSkipsEscrowAndPaysOtherSeats() (gas: 301223)\n[PASS] test_audit_contractWalletBatchSkipsAnotherContractsSeat() (gas: 616059)\n[PASS] test_audit_contractWalletCanClaimItsOwnShareAndTip() (gas: 686551)\n[PASS] test_audit_escrowedTipCannotBeSweptWhileWaitingForItsOwner() (gas: 431294)\n[PASS] test_audit_observerCannotForceAgentTipIntoEscrow() (gas: 458386)\n[PASS] test_audit_observerCannotForceSeatShareIntoEscrow() (gas: 360064)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 2.58ms (1.01ms CPU time)\n\nRan 4 tests for test/questions/OracleConsumerConformance.t.sol:OracleConsumerConformanceTest\n[PASS] test_acceptsAFreshSignatureFromTheVectorKey() (gas: 156976)\n[PASS] test_acceptsTheProtocolSignatureAsDelivered() (gas: 155161)\n[PASS] test_callbackSelectorIsCanonical() (gas: 763)\n[PASS] test_digestMatchesTheProtocol() (gas: 10320)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 1.22ms (648.04µs CPU time)\n\nRan 1 test for test/questions/QuestionsCallbackGas.t.sol:CallbackGasZeroSumTest\n[PASS] test_callbackGas_staysUnderTheGate() (gas: 286649)\nLogs:\n  callback gas (uint256): 95896\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.13ms (141.31µs CPU time)\n\nRan 1 test for test/payroll/PayrollGas.t.sol:PayrollAgedTipGasTest\n[PASS] test_gas_tipToSixteenAgentsWhoseEarlierTipsMustBeAged() (gas: 569443)\nLogs:\n  tip, 16 ids with tips to age: 553983\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.43ms (157.76µs CPU time)\n\nRan 1 test for test/questions/QuestionsCallbackGas.t.sol:CallbackGasLongListTest\n[PASS] test_callbackGas_staysUnderTheGate() (gas: 409266)\nLogs:\n  callback gas (bytes32[]): 116654\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 947.67µs (175.53µs CPU time)\n\nRan 4 tests for test/payroll/PayrollFixture.t.sol:PayrollFixtureTest\n[PASS] test_fixture_agreesWithTheFrozenInterfaceAndAddresses() (gas: 121477)\n[PASS] test_fixture_recordedBindingPaysTheRecordedSeatOwner() (gas: 573710)\n[PASS] test_fixture_recordedUnknownAgentRevertMeansUnbound() (gas: 476158)\n[PASS] test_fixture_seatPoolPaysTheRecordedOwner() (gas: 559929)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 4.18ms (585.86µs CPU time)\n\nRan 12 tests for test/payroll/PayrollGas.t.sol:PayrollGasTest\n[PASS] test_gas_book() (gas: 100431)\nLogs:\n  book: 98189\n\n[PASS] test_gas_claimAFullListOfSeats() (gas: 11892534)\nLogs:\n  claimSeats, 200 seats of 200 owners: 11845163\n\n[PASS] test_gas_claimSeat() (gas: 108465)\nLogs:\n  claimSeat: 105937\n\n[PASS] test_gas_claimTip() (gas: 117265)\nLogs:\n  claimTip: 119398\n\n[PASS] test_gas_claimTwentySeats() (gas: 1235653)\nLogs:\n  claimSeats, 20 seats of 20 owners: 1229322\n\n[PASS] test_gas_crown() (gas: 296496)\nLogs:\n  crown, list of 10: 177671\n\n[PASS] test_gas_drip() (gas: 71515)\nLogs:\n  drip: 68833\n\n[PASS] test_gas_fundFeeds() (gas: 172786)\nLogs:\n  fundFeeds, one meter topped up: 190268\n\n[PASS] test_gas_pay() (gas: 110924)\nLogs:\n  pay: 103380\n\n[PASS] test_gas_print() (gas: 234600)\nLogs:\n  print, one period with its count: 232314\n\n[PASS] test_gas_tipToFourKnownAgents() (gas: 85536)\nLogs:\n  tip, 4 ids already owed: 77631\n\n[PASS] test_gas_tipToSixteenNewAgents() (gas: 437629)\nLogs:\n  tip, 16 new ids: 427165\n\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 5.83ms (4.19ms CPU time)\n\nRan 25 tests for test/payroll/PayrollBooking.t.sol:PayrollBookingTest\n[PASS] test_book_afterAFailedPayNothingIsLost() (gas: 531232)\n[PASS] test_book_doesNotBookTips() (gas: 264535)\n[PASS] test_book_neverCountsMoneyTwice() (gas: 598506)\n[PASS] test_book_returnsZeroWhenNothingArrived() (gas: 400125)\n[PASS] test_book_splitsAPlainTransfer() (gas: 554779)\n[PASS] test_constructor_constantsMatchTheBrief() (gas: 49078)\n[PASS] test_constructor_deploysAgainstAddressesWithoutCode() (gas: 33405)\n[PASS] test_constructor_revertsOnARepeatedFeed() (gas: 4867)\n[PASS] test_constructor_revertsOnAZeroAddress() (gas: 5224)\n[PASS] test_constructor_revertsOnZeroSeats() (gas: 4977)\n[PASS] test_constructor_storesEveryDependency() (gas: 46287)\n[PASS] test_implementsTheFrozenInterface() (gas: 18913)\n[PASS] test_ledger_accumulatesOverManyBookings() (gas: 2820407)\n[PASS] test_ledger_startsAtZero() (gas: 92372)\n[PASS] test_pay_anyoneMayPay() (gas: 390755)\n[PASS] test_pay_booksWhatArrivedNotWhatWasAsked() (gas: 1056077)\n[PASS] test_pay_memoDoesNotChangeTheSplit() (gas: 391027)\n[PASS] test_pay_oneWeiIsAllStakers() (gas: 354256)\n[PASS] test_pay_revertsWithoutAnAllowance() (gas: 100741)\n[PASS] test_pay_revertsWithoutTheBalance() (gas: 99099)\n[PASS] test_pay_roundingRemainderGoesToStakers() (gas: 415849)\n[PASS] test_pay_splitsFiftyThirtyTwenty() (gas: 468414)\n[PASS] test_pay_zeroDoesNothingAndDoesNotRevert() (gas: 60506)\n[PASS] test_tokenUsedIsTheConstructorArgument() (gas: 9014)\n[PASS] test_unbookedIgnoresABalanceBelowWhatIsOwed() (gas: 563025)\nSuite result: ok. 25 passed; 0 failed; 0 skipped; finished in 4.51ms (3.28ms CPU time)\n\nRan 2 tests for test/payroll/PayrollGas.t.sol:PayrollAgeingPayGasTest\n[PASS] test_gas_fundFeedsThatAlsoReleasesTheWaitingFeedBudget() (gas: 241360)\nLogs:\n  fundFeeds, one meter topped up and the waiting budget released: 261090\n\n[PASS] test_gas_payThatAlsoAgesTheWaitingFeedBudget() (gas: 184536)\nLogs:\n  pay, with the feed budget aged: 128509\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 2.72ms (309.81µs CPU time)\n\nRan 3 tests for test/payroll/PayrollSeats.t.sol:PayrollSeatCarryTest\n[PASS] test_carry_claimsNeverExceedWhatThePoolWasGiven() (gas: 15192479)\n[PASS] test_carry_poolSmallerThanTheSeatCountPaysNobodyYet() (gas: 456396)\n[PASS] test_carry_weiThatDoNotDivideWaitForTheNextCredit() (gas: 543833)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 14.77ms (11.11ms CPU time)\n\nRan 6 tests for test/launch/LaunchRunbook.t.sol:LaunchRunbookTest\n[PASS] test_proof_shellRecipeGivesTheBodyTheContractSends() (gas: 4800575)\n[PASS] test_proof_statedPriceAndActionAreTheFeeds() (gas: 1067614)\n[PASS] test_runbook_documentedCalldataCreatesTheManifestFeeds() (gas: 9437342)\n[PASS] test_runbook_documentedCalldataIsWhatTheFixturesGive() (gas: 2377829)\n[PASS] test_runbook_firstDayGoesThroughInTheOrderWritten() (gas: 14985672)\n[PASS] test_runbook_printsTheCalldata() (gas: 234410)\nLogs:\n  feed: payrolls\n  feedId: 0x4bf83605cd50e9658472bde9be314bb3848a563301fa793328bef17ad2a07b61\n  calldata bytes: 1572\n  createFeed calldata: 0x8320d106000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000005a06f7261636c652e72657175657374406f7261636c652d310000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000151800000000000000000000000000000000000000000000000000000000000001b580000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000001bc16d674ec8000000000000000000000000000000000000000000000000000000b1a2bc2ec500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b77b22616e7377657254797065223a2275696e74323536222c22636861696e4964223a312c22646566696e6974696f6e73223a7b22726563697065223a227b5c226b696e645c223a5c226c6f672d73756d5c222c5c22616464726573735c223a5c223078643334613939626330663637616531626264363363363630653664306230646430336532363362375c222c5c226576656e745c223a5c226576656e74205472616e73666572286164647265737320696e64657865642066726f6d2c206164647265737320696e646578656420746f2c2075696e743235362076616c7565295c222c5c2273756d4172675c223a5c2276616c75655c222c5c226162735c223a66616c73652c5c2266696c7465725c223a7b5c22746f5c223a5c223078346530666135376264653732363037393335363533376532663334643637316539663431616462635c227d7d202d207772697465207265636970652065786163746c7920746869732c206576656e74207465787420696e636c756465642e227d2c227175657374696f6e223a2257686174206973207468652073756d206f66207468652076616c756520617267756d656e74206f66206576657279205472616e73666572286164647265737320696e64657865642066726f6d2c206164647265737320696e646578656420746f2c2075696e743235362076616c756529206576656e7420656d69747465642062792074686520746f6b656e20636f6e7472616374203078643334613939626330663637616531626264363363363630653664306230646430336532363362372077686f736520746f20617267756d656e742069732030783465306661353762646537323630373933353635333765326633346436373165396634316164626320696e207468652077696e646f773f222c2276223a312c2277696e646f77223a7b2266726f6d426c6f636b223a00000000000000000000000000000000000000000000000000000000000000000000000000000000562c2265766964656e6365223a22636861696e222c2270616e656c53697a65223a372c2271756f72756d223a352c22746f6c6572616e6365427073223a302c2276616c6964466f725365636f6e6473223a38363430307d00000000000000000000\n  feed: hires\n  feedId: 0xfde22d9c1b97b7ce9763dff388a66366f9012d4ba7c57c3239377a75532bee4d\n  calldata bytes: 1508\n  createFeed calldata: 0x8320d106000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000005606f7261636c652e72657175657374406f7261636c652d310000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000151800000000000000000000000000000000000000000000000000000000000001b580000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000001bc16d674ec8000000000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026f7b22616e7377657254797065223a2275696e74323536222c22636861696e4964223a312c22646566696e6974696f6e73223a7b22726563697065223a227b5c226b696e645c223a5c226c6f672d636f756e745c222c5c22616464726573735c223a5c223078643334613939626330663637616531626264363363363630653664306230646430336532363362375c222c5c226576656e745c223a5c226576656e74205472616e73666572286164647265737320696e64657865642066726f6d2c206164647265737320696e646578656420746f2c2075696e743235362076616c7565295c222c5c2266696c7465725c223a7b5c22746f5c223a5c223078346530666135376264653732363037393335363533376532663334643637316539663431616462635c227d7d202d207772697465207265636970652065786163746c7920746869732c206576656e74207465787420696e636c756465642e227d2c227175657374696f6e223a22486f77206d616e79205472616e73666572286164647265737320696e64657865642066726f6d2c206164647265737320696e646578656420746f2c2075696e743235362076616c756529206576656e7473206469642074686520746f6b656e20636f6e74726163742030786433346139396263306636376165316262643633633636306536643062306464303365323633623720656d69742077686f736520746f20617267756d656e742069732030783465306661353762646537323630373933353635333765326633346436373165396634316164626320696e207468652077696e646f773f222c2276223a312c2277696e646f77223a7b2266726f6d426c6f636b223a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000562c2265766964656e6365223a22636861696e222c2270616e656c53697a65223a372c2271756f72756d223a352c22746f6c6572616e6365427073223a302c2276616c6964466f725365636f6e6473223a38363430307d00000000000000000000\n  feed: employers\n  feedId: 0x22ad8df0e0af07aa59e29aa7f5540e0022fbfda0651ccae3eccb968553a14835\n  calldata bytes: 1924\n  createFeed calldata: 0x8320d106000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000007206f7261636c652e72657175657374406f7261636c652d31000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000015180000000000000000000000000000000000000000000000000000000000000bf68000000000000000000000000000000000000000000000000000000000000c4e0000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000001bc16d674ec8000000000000000000000000000000000000000000000000000000b1a2bc2ec500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004367b22616e7377657254797065223a22616464726573735b5d222c22636861696e4964223a312c22646566696e6974696f6e73223a7b226d6574686f64223a225265616420746865205472616e73666572286164647265737320696e64657865642066726f6d2c206164647265737320696e646578656420746f2c2075696e743235362076616c756529206c6f677320656d697474656420627920307864333461393962633066363761653162626436336336363065366430623064643033653236336237206f6e20457468657265756d206d61696e6e657420696e2074686520626c6f636b2077696e646f772c206b6565702074686f73652077686f736520746f206973203078346530666135376264653732363037393335363533376532663334643637316539663431616462632c206164642075702076616c7565207065722066726f6d20616464726573732c206f72646572206279207468617420746f74616c2066726f6d206c61726765737420746f20736d616c6c6573742077697468207469657320627920617363656e64696e6720616464726573732c20616e6420616e73776572207468652066697273742033206164647265737365732e222c22736f75726365223a22457468657265756d206d61696e6e6574206576656e74206c6f6773206f6e6c792c20726561642066726f6d20616e792066756c6c206e6f64652e204e6f2077656273697465206f7220696e6465782e227d2c2265766964656e6365223a2270616e656c222c2268656164223a332c227175657374696f6e223a225768696368207468726565206164647265737365732073656e7420746865206d6f737420494d442028746f6b656e20636f6e7472616374203078643334613939626330663637616531626264363363363630653664306230646430336532363362372920746f20307834653066613537626465373236303739333536353337653266333464363731653966343161646263206f6e20457468657265756d206d61696e6e657420696e207468652077696e646f773f2052616e6b2073656e64657273206279207468652073756d206f662076616c7565206f766572205472616e73666572286164647265737320696e64657865642066726f6d2c206164647265737320696e646578656420746f2c2075696e743235362076616c756529206576656e7473206f66207468617420636f6e74726163742077686f736520746f20617267756d656e74206973203078346530666135376264653732363037393335363533376532663334643637316539663431616462632c2067726f757065642062792066726f6d3b20616e737765722065786163746c792074686520746f702033206164647265737365732c206c6172676573742066697273742c207469657320627920617363656e64696e6720616464726573732e222c2276223a312c2277696e646f77223a7b2266726f6d426c6f636b223a0000000000000000000000000000000000000000000000000000000000000000000000000000000000322c2270616e656c53697a65223a372c2271756f72756d223a352c2276616c6964466f725365636f6e6473223a38363430307d0000000000000000000000000000\n\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 17.85ms (17.43ms CPU time)\n\nRan 18 tests for test/payroll/JobsReport.t.sol:JobsReportCrownTest\n[PASS] test_crown_aShortListFillsFewerPlaces() (gas: 563481)\n[PASS] test_crown_needsAnAnsweredRound() (gas: 252511)\n[PASS] test_crown_onlyOncePerRound() (gas: 341300)\n[PASS] test_crown_readsARealAttestedList() (gas: 326038)\n[PASS] test_crown_readsAnyValidLayoutOfTheList() (gas: 316390)\n[PASS] test_crown_readsTheRealAttestedListOfThree() (gas: 338356)\n[PASS] test_crown_rejectsAttestedBytesThatAreNotAnAddressList() (gas: 903434)\n[PASS] test_crown_rejectsBytesThatAreNotTheAttestedOnes() (gas: 215611)\n[PASS] test_crown_revertsWhenQuestionsDoes() (gas: 171045)\n[PASS] test_crown_roundsMayBeCrownedInAnyOrder() (gas: 577635)\n[PASS] test_crown_storesTheTopThreeOfTheAttestedList() (gas: 375633)\n[PASS] test_views_aPageHoldsAtMostOneHundred() (gas: 22793428)\n[PASS] test_views_beforeAnythingExists() (gas: 67579)\n[PASS] test_views_countAtRevertsPastTheEnd() (gas: 322643)\n[PASS] test_views_pagesOfTheCounts() (gas: 1989247)\n[PASS] test_views_pagesOfTheHistory() (gas: 2046576)\n[PASS] test_views_printAtRevertsPastTheEnd() (gas: 352161)\n[PASS] test_views_summaryGathersTheRunningFigures() (gas: 1265592)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 20.37ms (19.44ms CPU time)\n\nRan 2 tests for test/payroll/audit/AuditReports.t.sol:AuditBudgetParkTest\n[PASS] test_report1_finding2_parkedIMDDoesNotTurnTheOldTrancheIntoStakerStream() (gas: 1505669)\n[PASS] test_report2_finding2_aFundAndDefundAroundFundFeedsChangesNothing() (gas: 7897859)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 24.51ms (22.62ms CPU time)\n\nRan 23 tests for test/payroll/JobsReport.t.sol:JobsReportPrintTest\n[PASS] test_bestDay_aTieKeepsTheEarlierDay() (gas: 489466)\n[PASS] test_bestDay_isTheLargestSingleDay() (gas: 1214325)\n[PASS] test_bestDay_windowLengthLimitIsInclusive() (gas: 494312)\n[PASS] test_constructor_deploysBeforeQuestionsHasCode() (gas: 7511)\n[PASS] test_constructor_revertsOnARepeatedFeed() (gas: 6570)\n[PASS] test_constructor_revertsOnAZeroQuestions() (gas: 4327)\n[PASS] test_constructor_storesTheFeeds() (gas: 21451)\n[PASS] test_print_aWindowNotOverYetIsPassedOverForGood() (gas: 720739)\n[PASS] test_print_acceptsAZeroDay() (gas: 239318)\n[PASS] test_print_neverCountsABlockTwice() (gas: 886097)\n[PASS] test_print_passesOverAFailedRound() (gas: 452097)\n[PASS] test_print_passesOverAWindowThatIsEmptyOrNotOverYet() (gas: 684384)\n[PASS] test_print_passesOverAnAnswerTooLargeToBeAFigure() (gas: 562383)\n[PASS] test_print_readsAtMostEightRoundsACall() (gas: 3667373)\n[PASS] test_print_revertsOnlyWhenQuestionsDoes() (gas: 352079)\n[PASS] test_print_skippedRoundsCountAgainstTheEight() (gas: 1090901)\n[PASS] test_print_stopsAtAPendingRoundAndResumesWhenItIsAnswered() (gas: 796441)\n[PASS] test_print_storesAnAnsweredRound() (gas: 407865)\n[PASS] test_print_withNothingToReadChangesNothing() (gas: 76600)\n[PASS] test_streak_aCatchUpWindowAfterAMissedDayEndsIt() (gas: 1349490)\n[PASS] test_streak_aWindowThatStartsOneBlockLateBreaksIt() (gas: 513389)\n[PASS] test_streak_countsContiguousPrintsAndResetsOnAGap() (gas: 1184453)\n[PASS] test_streak_windowLengthLimitIsInclusive() (gas: 780460)\nSuite result: ok. 23 passed; 0 failed; 0 skipped; finished in 5.40ms (4.50ms CPU time)\n\nRan 31 tests for test/payroll/PayrollFeeds.t.sol:PayrollFeedsTest\n[PASS] test_budget_aBookingAgesTheBudgetAndReleasesNothing() (gas: 866664)\n[PASS] test_budget_aLongSilenceReleasesAllOfIt() (gas: 838080)\n[PASS] test_budget_aPartialTopUpTakesOnlyWhatLeftOutOfWhatIsDue() (gas: 1382469)\n[PASS] test_budget_aRefusedTopUpDoesNotHoldBackWhatIsDue() (gas: 1131593)\n[PASS] test_budget_dueIsSpentBeforeOldAndOldBeforeFresh() (gas: 2306513)\n[PASS] test_budget_isKeptThroughOneBoundaryAndReleasedAtTheNext() (gas: 938161)\n[PASS] test_budget_metersAreServedBeforeAnythingIsReleased() (gas: 1318379)\n[PASS] test_budget_releasedMoneyReachesStakersThroughTheStream() (gas: 21073089)\n[PASS] test_budget_spendingComesOutOfTheOldTrancheFirst() (gas: 1417779)\n[PASS] test_budget_whoCrossesTheBoundaryFirstDoesNotMatter() (gas: 2731390)\n[PASS] test_callBackDuringATopUp_isRefused() (gas: 980435)\n[PASS] test_feedShortfalls_reportsWhatEachMeterLacks() (gas: 93606)\n[PASS] test_fundFeeds_capsTheCostItAssumes() (gas: 940962)\n[PASS] test_fundFeeds_doesNotCountWhatOthersPutOnAMeter() (gas: 1328055)\n[PASS] test_fundFeeds_goesNoFurtherThanTheRunway() (gas: 1170295)\n[PASS] test_fundFeeds_replacesOnlyPayrollsPartOfWhatAMeterSpent() (gas: 1473224)\n[PASS] test_fundFeeds_revertsIfATopUpTakesMoreThanItWasOffered() (gas: 1606421)\n[PASS] test_fundFeeds_skipsAFeedQuestionsDoesNotKnow() (gas: 694931)\n[PASS] test_fundFeeds_skipsAFeedWhoseActionIsNotSold() (gas: 675111)\n[PASS] test_fundFeeds_theBalanceCoversWhatIsOwedInTheMiddleOfATopUp() (gas: 1040888)\n[PASS] test_fundFeeds_theFirstTwoFeedsShareAShortBudgetByNeed() (gas: 784980)\n[PASS] test_fundFeeds_theThirdFeedTakesOnlyWhatTheFirstTwoLeave() (gas: 1152539)\n[PASS] test_fundFeeds_topsEachMeterUpToItsRunway() (gas: 942523)\n[PASS] test_fundFeeds_unevenNeedsGetTheSameFraction() (gas: 851727)\n[PASS] test_fundFeeds_whatDidNotLeaveGoesBackWhereItCameFrom() (gas: 1777429)\n[PASS] test_fundFeeds_withNoBudgetDoesNothing() (gas: 63780)\n[PASS] test_questionsAnswersNonsense_fundsNothing() (gas: 908461)\n[PASS] test_questionsDown_blocksNothing() (gas: 1589090)\n[PASS] test_questionsFundReverts_keepsTheBudgetAndClearsTheAllowance() (gas: 661663)\n[PASS] test_questionsWithoutCode_fundsNothing() (gas: 372098)\n[PASS] test_topUpThatMovesLess_isBookedByWhatLeft() (gas: 942591)\nSuite result: ok. 31 passed; 0 failed; 0 skipped; finished in 22.07ms (20.63ms CPU time)\n\nRan 1 test for test/questions/QuestionsCallbackGas.t.sol:CallbackGasAddressListTest\n[PASS] test_callbackGas_staysUnderTheGate() (gas: 316872)\nLogs:\n  callback gas (address[]): 115936\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 959.32µs (158.47µs CPU time)\n\nRan 11 tests for test/payroll/integration/LaunchA.t.sol:LaunchAIntegrationTest\n[PASS] test_integration_aCatchUpCountIsKeptAndTheDaysAfterPairAgain() (gas: 6512395)\n[PASS] test_integration_aRealWindowIsAlwaysOverWhenItsAnswerIsPrinted() (gas: 3553054)\n[PASS] test_integration_aShortBudgetGoesToTheTwoDailyFeeds() (gas: 2674939)\n[PASS] test_integration_anUnknownHouseFeedIsSkipped() (gas: 1256958)\n[PASS] test_integration_crownAcceptsARealAttestedList() (gas: 2752599)\n[PASS] test_integration_fundFeedsTopsUpRealMeters() (gas: 2203329)\n[PASS] test_integration_launchAConstructsOnAnEmptyChainInsideTheGasGate() (gas: 9883347)\nLogs:\n  initcode of launch A, bytes: 46332\n  launch A at 240 gas a byte: 11119680\n  creation alone, measured here: 9689381\n\n[PASS] test_integration_printFollowsRealRounds() (gas: 4872999)\n[PASS] test_integration_theHiresCountSurvivesOneLateRequest() (gas: 16993485)\n[PASS] test_integration_theReportIsCompleteWithoutTheEmployersFeed() (gas: 5780256)\n[PASS] test_integration_theStreakEndsAfterAMissedDay() (gas: 7080259)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 37.96ms (33.76ms CPU time)\n\nRan 25 tests for test/questions/QuestionsFeeds.t.sol:QuestionsFeedsTest\n[PASS] testFuzz_checkFeed_saysWhatCreateFeedDoes(uint16,uint16,uint16,uint32,uint32,uint32,uint16,bool,uint96) (runs: 256, μ: 73833, ~: 65582)\n[PASS] testFuzz_feedIdOf_isTheDocumentedHash((bytes32,uint64,uint8,uint16,uint16,uint16,uint32,uint32,uint32,uint16,bool,bool,uint96,uint96,uint8,address,uint256,bytes),bytes,bytes) (runs: 256, μ: 15419, ~: 15418)\n[PASS] test_constructor_fixesItsThreeAddresses() (gas: 22263)\n[PASS] test_constructor_makesNoCallAndNeedsNoCode() (gas: 15638)\n[PASS] test_constructor_refusesZeroAddresses() (gas: 8710)\n[PASS] test_createFeed_acceptsEveryAnswerTypeByItsProtocolName() (gas: 3218414)\n[PASS] test_createFeed_idDependsOnEveryPart() (gas: 2373857)\n[PASS] test_createFeed_refusesABodyLongerThanTheIntakeTakes() (gas: 30985896)\n[PASS] test_createFeed_refusesALagOutsideFiveTo256() (gas: 1067203)\n[PASS] test_createFeed_refusesAPrefixThatIsNotTheFeedsCanonicalDocument() (gas: 272734)\n[PASS] test_createFeed_refusesATailThatDisagreesWithTheFeed() (gas: 1068658)\n[PASS] test_createFeed_refusesATipAboveThePriceCap() (gas: 1096300)\n[PASS] test_createFeed_refusesAZeroAction() (gas: 53373)\n[PASS] test_createFeed_refusesAZeroPriceCap() (gas: 54991)\n[PASS] test_createFeed_refusesAnUnknownAnswerType() (gas: 52539)\n[PASS] test_createFeed_refusesAnotherChain() (gas: 53839)\n[PASS] test_createFeed_refusesBadPanels() (gas: 1769113)\n[PASS] test_createFeed_refusesGateFieldsThatContradict() (gas: 1115258)\n[PASS] test_createFeed_refusesValidityOutsideTheProtocolsRange() (gas: 1065331)\n[PASS] test_createFeed_refusesWindowsThatCannotWork() (gas: 1635872)\n[PASS] test_createFeed_roomAboveTheCadenceIsWhatCatchesUp() (gas: 3632675)\n[PASS] test_createFeed_storesTheFeedAndSaysSo() (gas: 634451)\n[PASS] test_createFeed_twiceIsHarmless() (gas: 719897)\n[PASS] test_thereIsNoOwnerAndNoSetter() (gas: 196072)\n[PASS] test_unknownFeed_readsAsEmptyAndRevertsWhereItMust() (gas: 259910)\nSuite result: ok. 25 passed; 0 failed; 0 skipped; finished in 46.77ms (54.21ms CPU time)\n\nRan 1 test for test/payroll/PayrollScenario.t.sol:PayrollScenarioTest\n[PASS] test_scenario_fortyFiveDays() (gas: 85432484)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 49.67ms (48.50ms CPU time)\n\nRan 15 tests for test/payroll/PayrollSeats.t.sol:PayrollSeatsTest\n[PASS] test_claimSeat_cannotTouchAnotherSeatsShare() (gas: 390074)\n[PASS] test_claimSeat_followsTheSeatWhenItChangesHands() (gas: 381544)\n[PASS] test_claimSeat_paysTheCurrentWalletOwner() (gas: 241092)\n[PASS] test_claimSeat_paysTheOwnerWhoeverCalls() (gas: 329499)\n[PASS] test_claimSeat_rejectsAnOwnerThatIsNotAnAddress() (gas: 1092258)\n[PASS] test_claimSeat_revertsForAnIdThatIsNotASeat() (gas: 55250)\n[PASS] test_claimSeat_secondClaimPaysNothing() (gas: 173674)\n[PASS] test_claimSeat_waitsWhileOwnerOfReverts() (gas: 469797)\n[PASS] test_claimSeat_whenTheSeatTokenHasNoCode() (gas: 359935)\n[PASS] test_claimSeats_emptyAndAllSkippedListsPayNothing() (gas: 206578)\n[PASS] test_claimSeats_paysNeighboursWithOneOwnerInOneTransfer() (gas: 427848)\n[PASS] test_claimSeats_revertsAboveTheListLimit() (gas: 325258)\n[PASS] test_claimSeats_skipsWhatItCannotPayAndPaysTheRest() (gas: 416871)\n[PASS] test_everySeatGetsTheSameAndThePoolIsNeverOverpaid() (gas: 119051150)\n[PASS] test_seatOwnedByPayrollRecyclesItsShare() (gas: 390574)\nSuite result: ok. 15 passed; 0 failed; 0 skipped; finished in 36.00ms (34.77ms CPU time)\n\nRan 6 tests for test/payroll/audit/AuditReports.t.sol:AuditStreamTest\n[PASS] testFuzz_report2_finding3_theRuleForWhenABookingSlowsTheOldMoney(uint256,uint256) (runs: 256, μ: 532766, ~: 534697)\n[PASS] test_report1_finding3_aBookingDelaysMoneyAlreadyVestingUpToSevenDays() (gas: 32142301)\n[PASS] test_report1_finding4_dueNowIsZeroWhileTheVaultHasNoStakers() (gas: 657177)\n[PASS] test_report2_finding3_aBookingEqualToTheRemainderOneHourBeforeTheEnd() (gas: 501383)\n[PASS] test_report2_finding3_dustAgainstARemainderThatIsDustMovesTheEnd() (gas: 1431677)\n[PASS] test_report2_finding4_dueNowIsZeroWhileTheVaultHasNoCode() (gas: 502604)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 65.93ms (79.04ms CPU time)\n\nRan 8 tests for test/questions/HouseFeedProofs.t.sol:HouseFeedProofsTest\n[PASS] test_proofs_aChangedAnswerIsRefused() (gas: 4221446)\n[PASS] test_proofs_eachAnswerDecodesUnderItsFeedsAnswerType() (gas: 303905)\n[PASS] test_proofs_theBodyThatWasBoughtIsTheBodyTheContractSends() (gas: 366362)\n[PASS] test_proofs_theContractsQuestionHashIsTheAttestedOne() (gas: 345997)\n[PASS] test_proofs_theDocumentStatesWhatTheRecordsHold() (gas: 999990)\n[PASS] test_proofs_theFirstEmployersBodyWasNotAttested() (gas: 160931)\n[PASS] test_proofs_thePanelTheSignerAndTheValidityAreWhatTheFeedsRequire() (gas: 311187)\n[PASS] test_proofs_theRealSignedAnswersPassEveryCheckOfTheCallback() (gas: 12655798)\nLogs:\n  callback gas, real answer, payrolls: 115835\n  callback gas, real answer, hires: 115835\n  callback gas, real answer, employers: 115975\n\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 76.77ms (48.80ms CPU time)\n\nRan 12 tests for test/questions/QuestionsAbandon.t.sol:QuestionsAbandonTest\n[PASS] test_abandon_aLateAnswerThatMissedItsCallbackCanStillBeSubmitted() (gas: 1377187)\n[PASS] test_abandon_afterACallbackThatFailed() (gas: 1179833)\n[PASS] test_abandon_afterTheFullSilenceDeadline() (gas: 1131780)\n[PASS] test_abandon_cannotUndoAnAnswer() (gas: 1100958)\n[PASS] test_abandon_doesNotDependOnTheIntakeBehaving() (gas: 9763481)\n[PASS] test_abandon_failStreakSaturates() (gas: 111009761)\n[PASS] test_abandon_theFullSilenceDeadlineIsAlwaysEnough() (gas: 1611003)\n[PASS] test_abandon_theWaitIsNotCarriedIntoTheNextRound() (gas: 2959961)\n[PASS] test_abandon_thenTheFeedAsksAgain() (gas: 1637874)\n[PASS] test_abandon_thirtyMinutesAfterCompletionIsSeen() (gas: 1991044)\n[PASS] test_abandon_withNothingPending_reverts() (gas: 1611777)\n[PASS] test_waits_areTheValuesFixedAtLaunch() (gas: 27373)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 62.11ms (60.86ms CPU time)\n\nRan 6 tests for test/questions/QuestionsSharedAnswers.t.sol:QuestionsSharedAnswersTest\n[PASS] test_aTwinAppliesItsOwnPanelFloorToASharedAnswer() (gas: 1988851)\n[PASS] test_aTwinCannotTakeTheAnswerBeforeItsOwnRequestHasEnded() (gas: 2056303)\n[PASS] test_aTwinMayUseAnAnswerAfterTheFeedThatPaidForIt() (gas: 2071514)\n[PASS] test_anAnswerUsedOnATwinStillReachesTheFeedThatPaidForIt() (gas: 2168354)\n[PASS] test_anAttestationAnswersEachFeedOnce() (gas: 3417465)\n[PASS] test_submitStillRescuesTheFeedThatPaidAfterATwinUsedTheAnswer() (gas: 2220650)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 6.60ms (5.28ms CPU time)\n\nRan 5 tests for test/questions/QuestionHashFixtures.t.sol:QuestionHashFixturesTest\n[PASS] test_everyAttestedQuestionHashIsRebuilt() (gas: 13722722)\n[PASS] test_fixturesCoverEveryShapeTheFeedsUse() (gas: 418668)\n[PASS] test_hashIsRebuiltFromBodiesSentOnChain() (gas: 2279133)\n[PASS] test_quoteFollowsJsonStringify() (gas: 41366)\n[PASS] test_theRuleNeedsBothRefinements() (gas: 222823)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 31.36ms (43.09ms CPU time)\n\nRan 32 tests for test/questions/QuestionsRequest.t.sol:QuestionsRequestTest\n[PASS] testFuzz_gate_everyComparison(uint256,uint256,uint8) (runs: 256, μ: 826740, ~: 827244)\n[PASS] test_blocked_backsOffAfterFailedRounds() (gas: 5596499)\n[PASS] test_blocked_secondRequestInOneTransaction() (gas: 2804623)\n[PASS] test_blocked_secondRequestInOneTransaction_unmodifiedContract() (gas: 2946044)\n[PASS] test_blocked_untilTheCadenceHasElapsed() (gas: 1789376)\n[PASS] test_blocked_whenTheIntakeDoesNotSellTheAction() (gas: 357594)\n[PASS] test_blocked_whenTheMeterCannotPay() (gas: 1295415)\n[PASS] test_blocked_whenThePriceCannotBeRead() (gas: 6862979)\n[PASS] test_blocked_whenThePriceIsAboveTheFeedsCap() (gas: 1253277)\n[PASS] test_blocked_whenThePriceIsAbsurd_theViewsStillAnswer() (gas: 398452)\n[PASS] test_blocked_whileARoundIsPending() (gas: 1008584)\n[PASS] test_gate_longReply_readsOneWord() (gas: 1798215)\n[PASS] test_gate_opensWhenTheLineIsCrossed() (gas: 2633331)\n[PASS] test_gate_passesItsStoredArguments() (gas: 1595002)\n[PASS] test_gate_thatMisbehaves_isClosed() (gas: 2342319)\n[PASS] test_nextBody_isExactlyWhatRequestSends() (gas: 1038985)\n[PASS] test_request_afterTheCallersOwnIntakeRequest_isNeverServedAndEarnsTheCallerNothing() (gas: 2453247)\n[PASS] test_request_anUnservedRoundCanBeAnsweredThroughSubmit() (gas: 1849195)\n[PASS] test_request_anyoneMayCall_andEarnsTheTipWhenTheRoundIsAnswered() (gas: 1362141)\n[PASS] test_request_buysOneAnswerFromTheMeter() (gas: 1142216)\n[PASS] test_request_cannotBeReentered() (gas: 10345713)\n[PASS] test_request_paysTheLivePrice() (gas: 991381)\n[PASS] test_request_recordsTheClosingBlockHash() (gas: 2651826)\n[PASS] test_request_refusesAReusedRequestId() (gas: 7666567)\n[PASS] test_request_revertsRatherThanLeaveTheMetersShort() (gas: 7947834)\n[PASS] test_request_revertsWhenTheIntakeTakesLessThanThePrice() (gas: 7618250)\n[PASS] test_request_withNoTip_paysOnlyTheIntake() (gas: 1374555)\n[PASS] test_windows_contiguous_afterAFailedRound_startAtTheSameBlock() (gas: 2114437)\n[PASS] test_windows_contiguous_areCutAtTheMaximumAndCatchUp() (gas: 2492243)\n[PASS] test_windows_contiguous_tileExactly() (gas: 2527901)\n[PASS] test_windows_onAYoungChain_startAtBlockZeroOrWait() (gas: 1073334)\n[PASS] test_windows_rolling_alwaysTheNewestBlocks() (gas: 2343667)\nSuite result: ok. 32 passed; 0 failed; 0 skipped; finished in 105.78ms (113.49ms CPU time)\n\nRan 32 tests for test/payroll/PayrollStream.t.sol:PayrollStreamTest\n[PASS] testFuzz_booking_weightedEndIsBetweenTheTwoTimes(uint256,uint256) (runs: 256, μ: 301547, ~: 304691)\n[PASS] test_booking_aLargeBookingStillTakesAboutSevenDays() (gas: 132352)\n[PASS] test_booking_afterTheStreamEnded_takesSevenDays() (gas: 131796)\n[PASS] test_booking_anOldLargeCapDoesNotOutliveItsBacklog() (gas: 11173291)\n[PASS] test_booking_hourlyDustDoesNotStretchTheStream() (gas: 25305728)\n[PASS] test_booking_joinsTheStreamAtTheWeightedEndTime() (gas: 334841)\n[PASS] test_booking_neverPushesTheEndPastSevenDaysOrBeforeTheOldEnd() (gas: 149934)\n[PASS] test_booking_ofDustAsTheStreamEndsDoesNotTrapItsLastHour() (gas: 11566153)\n[PASS] test_booking_ofDustCannotHoldBackVestedMoney() (gas: 3716746)\n[PASS] test_booking_ofDustDoesNotMoveTheEnd() (gas: 594964)\n[PASS] test_booking_ofDustWithABacklogWaitingLeavesItReachable() (gas: 30811976)\n[PASS] test_booking_steadyTrafficNeverDelaysMoneyPastSevenDays() (gas: 63038416)\n[PASS] test_drip_afterTheStreamEndsTheBacklogStillLeavesInCappedCalls() (gas: 10953832)\n[PASS] test_drip_deliversTheWholeStreamAndNoMore() (gas: 24805393)\n[PASS] test_drip_isCappedAtOneHourOfStream() (gas: 592332)\n[PASS] test_drip_nothingHasVestedInTheBookingBlock() (gas: 68673)\n[PASS] test_drip_oneWeiStreamCanBeEmptied() (gas: 370631)\n[PASS] test_drip_revertsInsideTheTenMinuteGap() (gas: 188160)\n[PASS] test_drip_revertsWhenTheVaultAnswersTooShort() (gas: 675238)\n[PASS] test_drip_revertsWhenTheVaultHasNoCode() (gas: 372718)\n[PASS] test_drip_revertsWhenTheVaultIsOverAnotherAsset() (gas: 700400)\n[PASS] test_drip_revertsWhenTheVaultReverts() (gas: 679117)\n[PASS] test_drip_sendsWhatVestedToSIMD() (gas: 307982)\n[PASS] test_drip_waitsWhileTheVaultHasNoStakers() (gas: 1667968)\n[PASS] test_drip_withNoRevenueSendsNothing() (gas: 107545)\n[PASS] test_stream_viewAgreesWithDrip() (gas: 132421)\n[PASS] test_stuckVaultDoesNotBlockTheRestOfPayroll() (gas: 894580)\n[PASS] test_visitor_aStakerOfTheSameSizeWhoStaysGetsTheSame() (gas: 11718769)\n[PASS] test_visitor_oneVisitTakesItsShareOfOneCappedDrip() (gas: 377150)\n[PASS] test_visitor_repeatedOverAWholeStreamTakesItsProRataShareAndNoMore() (gas: 39974689)\nLogs:\n  the stream (IMD): 168.000000000000000000\n  the visitor's gain (IMD): 83.999999999999999832\n  the gain of the staker who stayed (IMD): 84.000000000000000167\n\n[PASS] test_visitor_withTheHoldAStakeDripLeaveTransactionReverts() (gas: 528274)\n[PASS] test_visitor_withoutTheHoldTheSameShareNeedsNoCapitalAtAll() (gas: 28830211)\nLogs:\n  taken with borrowed IMD and no hold (IMD): 82.271412149542436809\n\nSuite result: ok. 32 passed; 0 failed; 0 skipped; finished in 193.39ms (153.76ms CPU time)\n\nRan 21 tests for test/questions/QuestionsMeter.t.sol:QuestionsMeterTest\n[PASS] testFuzz_fund_neverCostsAFunderMoreThanAWei(uint96,uint96,uint8) (runs: 256, μ: 1554277, ~: 826660)\n[PASS] test_defund_isNeverBlockedByTheFeedsState() (gas: 1145945)\n[PASS] test_defund_moreThanHeld_takesEverything() (gas: 354184)\n[PASS] test_defund_returnsTheSharesPartOfTheMeter() (gas: 292282)\n[PASS] test_defund_roundsDownAndLeavesTheDustOnTheMeter() (gas: 1858088)\n[PASS] test_defund_withNoShares_reverts() (gas: 264466)\n[PASS] test_fundFor_addsToAnExistingPositionAtTheMetersWorth() (gas: 1215060)\n[PASS] test_fundFor_afterTheMeterWasSpentToZero() (gas: 1811625)\n[PASS] test_fundFor_oneself_isPlainFunding() (gas: 185104)\n[PASS] test_fundFor_paysFromTheCallerAndCreditsTheBeneficiary() (gas: 357158)\n[PASS] test_fundFor_refusesWhatFundRefuses_andAZeroBeneficiary() (gas: 132299)\n[PASS] test_fund_afterSpending_mintsAtTheMetersCurrentWorth() (gas: 2401443)\n[PASS] test_fund_creditsWhatActuallyArrived() (gas: 7196018)\n[PASS] test_fund_firstFunderCannotRoundALaterFunderOut() (gas: 339220)\n[PASS] test_fund_firstFunderGetsOneSharePerWei() (gas: 215794)\n[PASS] test_fund_refusesAMeterBeyondItsWidth() (gas: 272490)\n[PASS] test_fund_refusesZeroAndUnknownFeeds() (gas: 66175)\n[PASS] test_fund_revertsWithoutAllowanceOrBalance() (gas: 140691)\n[PASS] test_rescale_aVeryOldStakeReadsAsZero() (gas: 15363969)\n[PASS] test_rescale_keepsEveryonesPartAndNeverOverflows() (gas: 34406833)\n[PASS] test_spentToZero_oldSharesAreRetired() (gas: 2012741)\nSuite result: ok. 21 passed; 0 failed; 0 skipped; finished in 280.68ms (314.73ms CPU time)\n\nRan 10 tests for test/questions/QuestionBody.t.sol:QuestionBodyTest\n[PASS] testFuzz_builderMatchesTheReference(bytes,bytes,uint64,uint64) (runs: 256, μ: 39542, ~: 37056)\n[PASS] testFuzz_contractSendsTheReferenceBody(uint256,uint32,uint8,bool) (runs: 256, μ: 1426762, ~: 1382912)\n[PASS] testFuzz_hasNumber_matchesOnlyTheSameNumber(uint256,uint256,bool) (runs: 256, μ: 28175, ~: 22990)\n[PASS] testFuzz_holdsPanelEvidence_matchesAPlainSearch(bytes,bytes,bool,uint8) (runs: 256, μ: 48324, ~: 40028)\n[PASS] test_builder_edges() (gas: 25217)\n[PASS] test_hasNumber_wantsTheWholeNumber() (gas: 126459)\n[PASS] test_holdsPanelEvidence_findsTheBytesAnywhere() (gas: 65728)\n[PASS] test_holdsPanelEvidence_readsNothingPastTheText() (gas: 361573)\n[PASS] test_prefixStart_isCanonicalForEveryType() (gas: 17449)\n[PASS] test_startsWith_endsWith() (gas: 41898)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 229.02ms (324.68ms CPU time)\n\nRan 18 tests for test/questions/QuestionsTips.t.sol:QuestionsTipsTest\n[PASS] testFuzz_returnedTip_keepsEveryMeterRuleIntact(uint256,uint256,uint256,uint256,uint256,bool) (runs: 256, μ: 2326041, ~: 1994219)\n[PASS] test_returnedTip_aFunderThatArrivesWhileTheRoundIsPendingSharesIt() (gas: 1153112)\n[PASS] test_returnedTip_afterTheMeterWasRefilledFromZero() (gas: 1635376)\n[PASS] test_returnedTip_isSharedByTheFundersInProportion() (gas: 1739836)\n[PASS] test_returnedTip_neverLiftsAShareAboveOneWei() (gas: 1058967)\n[PASS] test_returnedTip_withEveryFunderGone_belongsToNobody() (gas: 2012996)\n[PASS] test_tip_aFeedWithoutATipHoldsNothing() (gas: 2100525)\n[PASS] test_tip_eachRoundHasItsOwnOutcome() (gas: 3310847)\n[PASS] test_tip_followsTheRoundsStatus() (gas: 1177251)\n[PASS] test_tip_goesBackToTheMeterWhenTheRoundFails() (gas: 1031538)\n[PASS] test_tip_goesBackWhenARefusedRequestIsClosedInTwoSteps() (gas: 987335)\n[PASS] test_tip_isEarnedByTheKeeperThatHandsItsOwnAnswerIn() (gas: 1241199)\n[PASS] test_tip_isEarnedWhenTheIntakeDeliversTheAnswer() (gas: 1251491)\n[PASS] test_tip_isSetAsideWhenARoundOpens() (gas: 868456)\n[PASS] test_tip_ofARoundWhoseCallbackIsLateStaysWithTheOpener() (gas: 1499573)\n[PASS] test_tip_onlyAnsweredRoundsPay() (gas: 3749761)\n[PASS] test_tip_staysWithTheOpenerWhenAnotherAccountSubmits() (gas: 1343128)\n[PASS] test_tip_twoKeepersAreKeptApart() (gas: 1868333)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 395.75ms (211.76ms CPU time)\n\nRan 7 tests for test/payroll/PayrollFuzz.t.sol:PayrollFuzzTest\n[PASS] testFuzz_book_splitsExactlyLikePay(uint256) (runs: 256, μ: 642336, ~: 661902)\n[PASS] testFuzz_feedBudget_waitsBetweenOneAndTwoFortnights(uint96,uint32) (runs: 256, μ: 511910, ~: 505797)\n[PASS] testFuzz_feeds_neverFundBeyondTheRunwayOrTheBudget(uint256,uint256,uint64[3]) (runs: 256, μ: 1744568, ~: 1774032)\n[PASS] testFuzz_split_holdsOverManyBookings(uint96[8]) (runs: 256, μ: 1118693, ~: 1129336)\n[PASS] testFuzz_split_isExactAndFavoursStakers(uint256) (runs: 256, μ: 429840, ~: 439575)\n[PASS] testFuzz_stream_paysEverythingAndNeverMoreThanTheCap(uint96[6],uint32[6]) (runs: 256, μ: 12600949, ~: 12603380)\n[PASS] testFuzz_tip_conservesEveryWei(uint256,uint8,uint256) (runs: 256, μ: 475444, ~: 469041)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 484.84ms (1.22s CPU time)\n\nRan 9 tests for test/launch/LaunchManifest.t.sol:LaunchManifestTest\n[PASS] test_bytecodeWalk_findsWhatItLooksForAndSkipsPushData() (gas: 423263)\n[PASS] test_launch_constructorsMakeNoCallAndNoCodeCheck() (gas: 13865853)\n[PASS] test_launch_deploysInManifestOrderOnAnEmptyChain() (gas: 11091393)\n[PASS] test_launch_fitsOurSizeAndGasGates() (gas: 10661617)\nLogs:\n  Questions: runtime bytes: 22233\n  Questions: initcode bytes with arguments: 23738\n  Questions: creation gas: 4935805\n  JobsReport: runtime bytes: 9320\n  JobsReport: initcode bytes with arguments: 9746\n  JobsReport: creation gas: 2104841\n  Payroll: runtime bytes: 11846\n  Payroll: initcode bytes with arguments: 12848\n  Payroll: creation gas: 2650102\n  launch A: initcode bytes in all: 46332\n  launch A: gas at 240 a byte: 11119680\n  launch A: creation gas measured here: 9690748\n\n[PASS] test_launch_runtimeBytecodeHasNoForbiddenOpcode() (gas: 28291343)\n[PASS] test_launch_stateChangingFunctionsAreExactlyTheDocumentedOnes() (gas: 20759152)\n[PASS] test_manifest_everyArgumentIsWhatTheCodeExpects() (gas: 13483445)\n[PASS] test_manifest_feedIdsAreRecomputedFromTheFixtures() (gas: 4346548)\n[PASS] test_manifest_namesTheThreeContractsInOrder() (gas: 1546144)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 511.58ms (532.15ms CPU time)\n\nRan 2 tests for test/payroll/PayrollFuzz.t.sol:PayrollSeatFuzzTest\n[PASS] testFuzz_seatPool_paysEachSeatExactlyItsShare(uint64[10],uint8[10]) (runs: 256, μ: 3245661, ~: 3250092)\n[PASS] testFuzz_seat_claimsDoNotMoveAnotherSeatsShare(uint64,uint8,uint8,uint8) (runs: 256, μ: 582573, ~: 594752)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.02s (1.08s CPU time)\n\nRan 8 tests for test/questions/RealAttestations.t.sol:RealAttestationsTest\n[PASS] test_liveOracleSignaturesVerifyInOurDomain() (gas: 6723934)\n[PASS] test_realAddress_acceptedEndToEnd() (gas: 6653405)\n[PASS] test_realAttestation_tamperedIsRefused() (gas: 4277361)\n[PASS] test_realLogSum_acceptedEndToEnd() (gas: 4335739)\n[PASS] test_realNo_storedNotReverted() (gas: 3160595)\n[PASS] test_realPanelNumber_acceptedEndToEnd() (gas: 4556402)\n[PASS] test_realYes_acceptedEndToEnd() (gas: 3079094)\n[PASS] test_realYes_nonAsciiQuestion_acceptedEndToEnd() (gas: 3114532)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 994.28ms (27.35ms CPU time)\n\nRan 41 tests for test/questions/QuestionsAnswers.t.sol:QuestionsAnswersTest\n[PASS] test_callback_aNoIsStoredNotReverted() (gas: 2310665)\n[PASS] test_callback_aZeroSumIsStoredNotReverted() (gas: 1050886)\n[PASS] test_callback_aboutAnotherChain_reverts() (gas: 1004658)\n[PASS] test_callback_afterAbandon_reverts() (gas: 1061279)\n[PASS] test_callback_anEmptyListIsStored() (gas: 1692663)\n[PASS] test_callback_answersAQuestionAPanelJudges() (gas: 1496115)\n[PASS] test_callback_everyAnswerTypeBecomesOneWord() (gas: 7641557)\n[PASS] test_callback_expired_reverts() (gas: 1183349)\n[PASS] test_callback_fitsTheStipend_evenALoweredOne() (gas: 1733050)\n[PASS] test_callback_forASettledId_reverts() (gas: 1216416)\n[PASS] test_callback_forAnUnknownId_reverts() (gas: 973590)\n[PASS] test_callback_forAnotherWindow_reverts() (gas: 1187524)\n[PASS] test_callback_fromASmallerPanel_reverts() (gas: 1347597)\n[PASS] test_callback_fromAnyoneButTheIntake_reverts() (gas: 1001720)\n[PASS] test_callback_issuedInTheFuture_reverts() (gas: 1110986)\n[PASS] test_callback_lenientFeed_takesARerunSettledAnswerDownToItsFloor() (gas: 1840946)\n[PASS] test_callback_malformedAnswers_revert() (gas: 4230220)\n[PASS] test_callback_ofAnotherType_reverts() (gas: 1009085)\n[PASS] test_callback_replayed_reverts() (gas: 2304035)\n[PASS] test_callback_signedByAnotherKey_reverts() (gas: 956891)\n[PASS] test_callback_signedForAnotherConsumerOrChain_reverts() (gas: 1070193)\n[PASS] test_callback_storesTheAnswer() (gas: 1135753)\n[PASS] test_callback_strictFeed_needsAgreedAtLeastTheSignedQuorum() (gas: 1348331)\n[PASS] test_callback_tampered_reverts() (gas: 2051428)\n[PASS] test_callback_theIntakeRefusesToStarveIt() (gas: 956606)\n[PASS] test_callback_toAnotherQuestion_reverts() (gas: 1007334)\n[PASS] test_callback_unpinnedFeed_ignoresTheQuestionHashOnly() (gas: 1839634)\n[PASS] test_callback_withAnotherBlockHash_reverts() (gas: 1186502)\n[PASS] test_reveal_isOnlyForListFeeds() (gas: 1093640)\n[PASS] test_reveal_publishesTheListBehindARound() (gas: 1844926)\n[PASS] test_submit_afterARequestThatEndedWithoutAnAnswer() (gas: 1094637)\n[PASS] test_submit_anAnswerToAnotherFeed_reverts() (gas: 2237423)\n[PASS] test_submit_appliesEveryCheckTheCallbackDoes() (gas: 1746421)\n[PASS] test_submit_beforeTheIntakeHasCompletedTheRequest_reverts() (gas: 1561175)\n[PASS] test_submit_deliversAnAnswerTheCallbackMissed() (gas: 1378168)\n[PASS] test_submit_isNotForAQuestionAPanelJudges() (gas: 1748037)\n[PASS] test_submit_needsAPinnedQuestion() (gas: 1725495)\n[PASS] test_submit_opensThirtyMinutesAfterARequestTheIntakeNeverCompleted() (gas: 1361507)\n[PASS] test_submit_panelEvidenceIsReadFromTheDocumentNotTheWording() (gas: 1747953)\n[PASS] test_submit_withAnIntakeThatCannotBeRead_waitsTheThirtyMinutes() (gas: 8098978)\n[PASS] test_submit_withoutAPendingRoundOrAFeed_reverts() (gas: 79399)\nSuite result: ok. 41 passed; 0 failed; 0 skipped; finished in 1.06s (44.87ms CPU time)\n\nRan 11 tests for test/launch/LaunchTransferFailures.t.sol:LaunchTransferFailuresTest\n[PASS] testFuzz_failedDefundDuringPendingRoundPreservesShares(bool) (runs: 512, μ: 1767516, ~: 1767208)\n[PASS] testFuzz_failedDripDoesNotAdvanceVestingOrStartCooldown(bool) (runs: 512, μ: 797177, ~: 796869)\n[PASS] testFuzz_failedGiftFundingLeavesBeneficiaryAndPayerUntouched(uint96,bool) (runs: 512, μ: 554989, ~: 554970)\n[PASS] testFuzz_failedKeeperCollectionPreservesEarnedAndPendingTips(bool) (runs: 512, μ: 3074774, ~: 3074466)\n[PASS] testFuzz_failedPayAndTipDoNotConsumeAllowanceOrBookRevenue(uint96,bool) (runs: 512, μ: 825382, ~: 825116)\n[PASS] testFuzz_failedSeatBatchRestoresEarlierTransfersAndEveryClaim(bool) (runs: 512, μ: 1051877, ~: 1051569)\n[PASS] testFuzz_failedSingleSeatClaimStillFollowsTheNextOwner(bool) (runs: 512, μ: 838355, ~: 838047)\n[PASS] testFuzz_failedTipClaimRestoresAllAgeTranches(bool) (runs: 512, μ: 825934, ~: 825626)\n[PASS] testFuzz_payrollRejectsEveryNestedMoneyEntryPoint(uint8) (runs: 512, μ: 564907, ~: 565244)\n[PASS] testFuzz_questionsRejectsEveryNestedMoneyEntryPoint(uint8) (runs: 512, μ: 423155, ~: 412198)\n[PASS] test_tokenWithoutReturnDataCanPayAndRedeem() (gas: 836763)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 1.08s (2.72s CPU time)\n\nRan 11 tests for test/questions/HouseFeeds.t.sol:HouseFeedsTest\n[PASS] test_employersAcceptsAValidDeliveryAfterTwelveHours() (gas: 3212101)\n[PASS] test_employersIsJudgedByThePanelWithItsMethodPinned() (gas: 96658)\n[PASS] test_employersTakesAnswersFromTheIntakeOnlyAndOnlyWithTheQuorumMet() (gas: 3324032)\n[PASS] test_exampleBodiesAreWhatTheContractSends() (gas: 6565117)\n[PASS] test_feedIdsRecomputeFromTheirParts() (gas: 230824)\n[PASS] test_feedsAreAcceptedOnMainnet() (gas: 3129843)\n[PASS] test_feedsAreRefusedOffMainnet() (gas: 102440)\n[PASS] test_hiresSaysItCountsZeroValueTransfers() (gas: 277917)\n[PASS] test_prefixesAreTheCanonicalFormOfTheBody() (gas: 1725262)\n[PASS] test_recipesNameTheTokenAndThePayee() (gas: 385426)\n[PASS] test_theWaitsFitTheHouseFeeds() (gas: 199551)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 1.09s (46.48ms CPU time)\n\nRan 5 tests for test/questions/QuestionsLaunchAudit.t.sol:QuestionsLaunchAuditTest\n[PASS] testFuzz_audit_silenceWaitsThroughTheRequestedValidity(uint32) (runs: 256, μ: 1924885, ~: 1924934)\n[PASS] test_audit_observerCannotDiscardAStillValidPanelAnswerAtTwelveHours() (gas: 1697141)\n[PASS] test_audit_publicAttestationCannotTakeTheOpenersTip() (gas: 1823442)\n[PASS] test_audit_rotatedSignerIsRejectedAndUnspentMeterRemainsRedeemable() (gas: 1622238)\n[PASS] test_audit_signerCodeWithoutERC1271RejectsPlainSignatures() (gas: 1717238)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 1.08s (1.09s CPU time)\n\nRan 19 tests for test/payroll/JobsReport.t.sol:JobsReportCountsTest\n[PASS] test_counts_aCatchUpCountIsRecordedAndJoinsNoPrint() (gas: 1402086)\n[PASS] test_counts_aCountForADayThatWasNeverPrintedIsStillRecorded() (gas: 769942)\n[PASS] test_counts_aCountJoinsThePrintForTheSameWindow() (gas: 608229)\n[PASS] test_counts_aFailedRoundIsPassedOverAndTheRetryCounts() (gas: 670364)\n[PASS] test_counts_aFeedThatDriftedStillPairsEveryDay() (gas: 4278984)\n[PASS] test_counts_aLongRunOfUncountedPrintsIsWorkedThroughInBoundedSteps() (gas: 4035614)\n[PASS] test_counts_aLongerPrintDoesNotTakeADaysCount() (gas: 1157826)\n[PASS] test_counts_aMissedDayDoesNotShiftLaterCounts() (gas: 1167901)\n[PASS] test_counts_aShiftOfExactlyHalfJoinsNeither() (gas: 1197100)\n[PASS] test_counts_aShiftOfMoreThanHalfJoinsTheNextDay() (gas: 1235366)\n[PASS] test_counts_aZeroCountIsACount() (gas: 425205)\n[PASS] test_counts_anAnswerThatArrivesFirstIsRecordedThenPaired() (gas: 694721)\n[PASS] test_counts_anAnswerThatArrivesLaterIsAttachedThen() (gas: 632189)\n[PASS] test_counts_neverCountABlockTwice() (gas: 854043)\n[PASS] test_counts_pairWithThePrintTheyMostlyShare() (gas: 1302623)\n[PASS] test_counts_shareTheEightRoundsWithPayrolls() (gas: 2499786)\n[PASS] test_counts_theReportIsTheSameWheneverPrintIsCalled() (gas: 3772691)\n[PASS] test_counts_unusableAnswersArePassedOver() (gas: 957387)\n[PASS] test_print_neverReadsTheEmployersFeed() (gas: 1016160)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 1.09s (7.76ms CPU time)\n\nRan 40 tests for test/payroll/PayrollTips.t.sol:PayrollTipsTest\n[PASS] testFuzz_sweepTip_everyTipKeepsItsOwnWait(uint32[6],uint64[6]) (runs: 256, μ: 898508, ~: 886118)\n[PASS] testFuzz_sweepTip_lowGasNeverMakesAnOwnedSeatLookOwnerless(uint256) (runs: 256, μ: 10998288, ~: 12469184)\n[PASS] testFuzz_sweepTip_lowGasNeverSweepsABoundAgent(uint256) (runs: 256, μ: 297058, ~: 316868)\n[PASS] test_adapterRead_anAdapterBeyondItsAllowanceIsNotHeard() (gas: 203651)\n[PASS] test_adapterRead_anAdapterWithinItsAllowanceIsHeard() (gas: 355503)\n[PASS] test_adapterRead_reportsTooLittleGas() (gas: 179013)\n[PASS] test_claimTip_nothingOwedReturnsZeroWithoutAskingTheAdapter() (gas: 108272)\n[PASS] test_claimTip_paysTheOwnerOfTheBoundSeat() (gas: 440040)\n[PASS] test_claimTip_paysTipsOfEveryAge() (gas: 538531)\n[PASS] test_claimTip_paysWhoeverOwnsTheSeatNow() (gas: 281786)\n[PASS] test_claimTip_revertsForAnUnboundAgent() (gas: 167013)\n[PASS] test_claimTip_revertsWhenBoundToAnotherToken() (gas: 233637)\n[PASS] test_claimTip_revertsWhenTheAdapterReverts() (gas: 333018)\n[PASS] test_claimTip_revertsWhenTheSeatHasNoOwner() (gas: 347811)\n[PASS] test_claimTip_revertsWhenTheTokenIdIsNotASeat() (gas: 235271)\n[PASS] test_claimTip_treatsMalformedAnswersAsNotClaimable() (gas: 1052354)\n[PASS] test_claimTip_whenTheAdapterHasNoCode() (gas: 207230)\n[PASS] test_sweepTip_aLaterTipDoesNotDelayAnEarlierOne() (gas: 352585)\n[PASS] test_sweepTip_aSeatThatHasItsOwnerBackKeepsTheTip() (gas: 352522)\n[PASS] test_sweepTip_aTipWaitsBetween180And360Days() (gas: 399663)\n[PASS] test_sweepTip_afterAClaimANewTipWaitsItsOwnTime() (gas: 466911)\n[PASS] test_sweepTip_agentBoundInTimeKeepsItsTip() (gas: 375487)\n[PASS] test_sweepTip_movesAnUnboundAgentsTipsToTheSeatPoolOnceTheyHaveWaited() (gas: 448020)\n[PASS] test_sweepTip_neverTakesATipThatCanBeClaimed() (gas: 280940)\n[PASS] test_sweepTip_nothingOwedReturnsZero() (gas: 37204)\n[PASS] test_sweepTip_oneWeiTipsCannotHoldOlderTipsOutOfTheSeatPool() (gas: 862499)\n[PASS] test_sweepTip_reportsTooLittleGasAfterAFailedOwnerRead() (gas: 5241802)\n[PASS] test_sweepTip_takesATipBoundToASeatNobodyOwns() (gas: 486188)\n[PASS] test_sweepTip_takesATipBoundToAnotherToken() (gas: 401019)\n[PASS] test_sweepTip_takesOnlyWhatHasWaited() (gas: 563634)\n[PASS] test_tip_acceptsAnyIds() (gas: 230335)\n[PASS] test_tip_addsUpAcrossPeriods() (gas: 502174)\n[PASS] test_tip_duplicateIdsAreCreditedOncePerMention() (gas: 283107)\n[PASS] test_tip_emptyListSendsEverythingToTheSeatPool() (gas: 339394)\n[PASS] test_tip_onlyTheFirstSixteenIdsShare() (gas: 636368)\n[PASS] test_tip_remainderJoinsTheSeatPool() (gas: 403523)\n[PASS] test_tip_revertsOnlyWhenTheTransferDoes() (gas: 45044)\n[PASS] test_tip_splitsEquallyAndIsNotBookedAsRevenue() (gas: 374131)\n[PASS] test_tip_tooSmallToSplitGoesToTheSeatPool() (gas: 311592)\n[PASS] test_tip_zeroDoesNothing() (gas: 60881)\nSuite result: ok. 40 passed; 0 failed; 0 skipped; finished in 1.09s (1.21s CPU time)\n\nRan 6 tests for test/payroll/JobsReportFuzz.t.sol:JobsReportFuzzTest\n[PASS] testFuzz_counts_pairExactlyByTheMostlySharedRule(uint256) (runs: 256, μ: 2240341, ~: 2305567)\n[PASS] testFuzz_crown_anyAttestedBytesEndCleanly(bytes) (runs: 256, μ: 180183, ~: 179958)\n[PASS] testFuzz_crown_anyListShapedBytesEndCleanly(uint256,uint256,uint256[5],bool,bool) (runs: 256, μ: 201991, ~: 182776)\n[PASS] testFuzz_crown_onlyTheAttestedBytesAreAccepted(address[],bytes) (runs: 256, μ: 202517, ~: 201757)\n[PASS] testFuzz_crown_topThreeAreTheFirstThreeOfTheList(address[]) (runs: 256, μ: 385851, ~: 380125)\n[PASS] testFuzz_print_matchesTheRules(uint256) (runs: 256, μ: 1031393, ~: 986738)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 1.09s (2.43s CPU time)\n\nRan 1 test for test/payroll/invariant/PayrollInvariant.t.sol:PayrollInvariantTest\n[PASS]\nPayrollInvariantTest invariants:\n[PASS] invariant_everyPayoutReachedItsPayee\n[PASS] invariant_noCallMisbehaved\n[PASS] invariant_noSeatTakesMoreThanItsShare\n[PASS] invariant_theBalanceCoversEverythingOwed\n[PASS] invariant_theSplitAddsUp\n PayrollInvariantTest invariants (runs: 64, calls: 3072, reverts: 150)\n\n╭----------------+-----------------------+-------+---------+----------╮\n| Contract       | Selector              | Calls | Reverts | Discards |\n+=====================================================================+\n| PayrollHandler | bindAgent             | 143   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | book                  | 144   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | breakSeat             | 156   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | changeQuestions       | 155   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | claimSeat             | 146   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | claimSeats            | 174   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | claimTip              | 134   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | defundMeterAsStranger | 165   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | drip                  | 159   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | emptyVault            | 145   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | fundFeeds             | 155   | 150     | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | fundMeterAsStranger   | 157   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | moveSeat              | 173   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | pay                   | 150   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | refillVault           | 149   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | spendMeter            | 145   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | sweepTip              | 150   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | tip                   | 164   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | transferPlainly       | 158   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | wait                  | 150   | 0       | 0        |\n╰----------------+-----------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.16s (1.15s CPU time)\n\nRan 2 tests for test/questions/QuestionsInvariant.t.sol:QuestionsInvariantTest\n[PASS]\nQuestionsInvariantTest invariants:\n[PASS] invariant_Q1_onePendingRoundPerFeed\n[PASS] invariant_Q2_eachAttestationAnswersAFeedOnce\n[PASS] invariant_Q3_contiguousWindowsTile\n[PASS] invariant_everyHolderCanAlwaysDefund\n[PASS] invariant_metersAddUpToTheContractsBalance\n[PASS] invariant_sharesNeverClaimMoreThanTheMeter\n[PASS] invariant_tipsAreOwedForAnswersOnly\n QuestionsInvariantTest invariants (runs: 64, calls: 3072, reverts: 0)\n\n╭------------------+-----------+-------+---------+----------╮\n| Contract         | Selector  | Calls | Reverts | Discards |\n+===========================================================+\n| QuestionsHandler | abandon   | 210   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | answer    | 229   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | collect   | 233   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | defund    | 183   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | donate    | 218   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | fund      | 208   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | fundFor   | 206   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | moveGate  | 216   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | movePrice | 226   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | pass      | 221   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | refuse    | 242   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | replay    | 214   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | request   | 218   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | twin      | 248   | 0       | 0        |\n╰------------------+-----------+-------+---------+----------╯\n\n[PASS] test_handlerReachesEveryState() (gas: 50204604)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 5.44s (5.50s CPU time)\n\nRan 2 tests for test/launch/invariant/LaunchLifecycleInvariant.t.sol:LaunchLifecycleInvariantTest\n[PASS]\nLaunchLifecycleInvariantTest invariants:\n[PASS] invariant_externalMoneyEqualsCustodyPlusVerifiedExits\n[PASS] invariant_metersAndKeeperLiabilitiesRemainCovered\n[PASS] invariant_reportContainsOnlyAnsweredRoundsAndUniquePairs\n LaunchLifecycleInvariantTest invariants (runs: 256, calls: 24576, reverts: 0)\n\n╭------------------------+--------------+-------+---------+----------╮\n| Contract               | Selector     | Calls | Reverts | Discards |\n+====================================================================+\n| LaunchLifecycleHandler | abandon      | 1357  | 0       | 0        |\n|------------------------+--------------+-------+---------+----------|\n| LaunchLifecycleHandler | advance      | 1343  | 0       | 0        |\n|------------------------+--------------+-------+---------+----------|\n| LaunchLifecycleHandler | answer       | 1354  | 0       | 0        |\n|------------------------+--------------+-------+---------+----------|\n| LaunchLifecycleHandler | book         | 1374  | 0       | 0        |\n|------------------------+--------------+-------+---------+----------|\n| LaunchLifecycleHandler | changePrice  | 1355  | 0       | 0        |\n|------------------------+--------------+-------+---------+----------|\n| LaunchLifecycleHandler | claim        | 1375  | 0       | 0        |\n|------------------------+--------------+-------+---------+----------|\n| LaunchLifecycleHandler | collect      | 1396  | 0       | 0        |\n|------------------------+--------------+-------+---------+----------|\n| LaunchLifecycleHandler | crown        | 1409  | 0       | 0        |\n|------------------------+--------------+-------+---------+----------|\n| LaunchLifecycleHandler | defund       | 1376  | 0       | 0        |\n|------------------------+--------------+-------+---------+----------|\n| LaunchLifecycleHandler | drip         | 1341  | 0       | 0        |\n|------------------------+--------------+-------+---------+----------|\n| LaunchLifecycleHandler | moveSeat     | 1347  | 0       | 0        |\n|------------------------+--------------+-------+---------+----------|\n| LaunchLifecycleHandler | pay          | 1402  | 0       | 0        |\n|------------------------+--------------+-------+---------+----------|\n| LaunchLifecycleHandler | printReport  | 1389  | 0       | 0        |\n|------------------------+--------------+-------+---------+----------|\n| LaunchLifecycleHandler | rejectAnswer | 1325  | 0       | 0        |\n|------------------------+--------------+-------+---------+----------|\n| LaunchLifecycleHandler | request      | 1361  | 0       | 0        |\n|------------------------+--------------+-------+---------+----------|\n| LaunchLifecycleHandler | sponsor      | 1353  | 0       | 0        |\n|------------------------+--------------+-------+---------+----------|\n| LaunchLifecycleHandler | tip          | 1393  | 0       | 0        |\n|------------------------+--------------+-------+---------+----------|\n| LaunchLifecycleHandler | topUp        | 1326  | 0       | 0        |\n╰------------------------+--------------+-------+---------+----------╯\n\n[PASS] test_lifecycleHandlerReachesSuccessFailureRecoveryAndEscrow() (gas: 9052828)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 10.11s (10.11s CPU time)\n\nRan 50 test suites in 10.15s (29.05s CPU time): 515 tests passed, 0 failed, 0 skipped (515 total tests)\n","passed":true},{"durationMs":114,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"JobsReport.crown(uint64,bytes)\",\"JobsReport.print()\",\"Payroll.book()\",\"Payroll.claimSeat(uint256)\",\"Payroll.claimSeats(uint256[])\",\"Payroll.claimTip(uint256)\",\"Payroll.drip()\",\"Payroll.fundFeeds()\",\"Payroll.pay(uint256,bytes32)\",\"Payroll.sweepTip(uint256)\",\"Payroll.tip(uint256[],uint256)\",\"Questions.abandon(bytes32)\",\"Questions.collectTips()\",\"Questions.createFeed((bytes32,uint64,uint8,uint16,uint16,uint16,uint32,uint32,uint32,uint16,bool,bool,uint96,uint96,uint8,address,uint256,bytes),bytes,bytes)\",\"Questions.defund(bytes32,uint256)\",\"Questions.fund(bytes32,uint256)\",\"Questions.fundFor(bytes32,uint256,address)\",\"Questions.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"Questions.request(bytes32)\",\"Questions.reveal(bytes32,uint64,bytes)\",\"Questions.submit(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\"],\"files\":{\".gitignore\":12,\"ADAPTATION.md\":163,\"LICENSE\":21,\"README.md\":269,\"docs/AUDITS.md\":298,\"docs/DEVIATIONS.md\":251,\"docs/LAUNCH.md\":813,\"docs/THREATS.md\":553,\"foundry.toml\":43,\"remappings.txt\":2,\"src/interfaces/IPayroll.sol\":41,\"src/interfaces/IQuestions.sol\":57,\"src/interfaces/external/IIntake.sol\":55,\"src/interfaces/external/ISeatAdapter.sol\":21,\"src/interfaces/external/Mainnet.sol\":40,\"src/payroll/JobsReport.sol\":680,\"src/payroll/Payroll.sol\":1243,\"src/questions/OracleAttestation.sol\":221,\"src/questions/QuestionBody.sol\":138,\"src/questions/Questions.sol\":1390,\"test/fixtures/payroll/attested-address-list.json\":15,\"test/fixtures/payroll/mainnet-seat-binding.json\":16,\"test/fixtures/questions/feeds/employers.json\":92,\"test/fixtures/questions/feeds/hires.json\":76,\"test/fixtures/questions/feeds/payrolls.json\":75,\"test/fixtures/questions/intake/requested.json\":53,\"test/fixtures/questions/proofs/employers-first-attempt.intake.json\":1,\"test/fixtures/questions/proofs/employers-first-attempt.oracle.json\":1,\"test/fixtures/questions/proofs/employers.attestation.json\":1,\"test/fixtures/questions/proofs/employers.intake.json\":1,\"test/fixtures/questions/proofs/employers.oracle.json\":1,\"test/fixtures/questions/proofs/hires.attestation.json\":1,\"test/fixtures/questions/proofs/hires.intake.json\":1,\"test/fixtures/questions/proofs/hires.oracle.json\":1,\"test/fixtures/questions/proofs/index.json\":190,\"test/fixtures/questions/proofs/payrolls.attestation.json\":1,\"test/fixtures/questions/proofs/payrolls.intake.json\":1,\"test/fixtures/questions/proofs/payrolls.oracle.json\":1,\"test/fixtures/questions/requests/01604a11-d04f-4960-9b1d-a3811a000048.json\":1,\"test/fixtures/questions/requests/03f89e74-3db8-4c10-8fa8-d3424c9a18d4.json\":1,\"test/fixtures/questions/requests/05ce467c-1900-4a32-87ec-70d499f98536.json\":1,\"test/fixtures/questions/requests/0e21ab1a-ca72-4618-b814-d1909aeb5437.json\":1,\"test/fixtures/questions/requests/13766f38-ef02-45f1-b168-7107d657ee44.json\":1,\"test/fixtures/questions/requests/18b11d16-705c-494e-b59a-22c6ecdb4cd1.json\":1,\"test/fixtures/questions/requests/286b7948-ba7c-41ae-9cc9-7ba15f497876.json\":1,\"test/fixtures/questions/requests/383a398f-7fc1-4a43-8c88-37573e64c79d.json\":1,\"test/fixtures/questions/requests/4886cfab-425d-4130-bc58-a764627f3b26.json\":1,\"test/fixtures/questions/requests/54d11aa3-3603-45a6-9e7d-abf63e359c29.json\":1,\"test/fixtures/questions/requests/709556f3-b5c8-4034-a780-9e3a34eed0ee.json\":1,\"test/fixtures/questions/requests/8f76e26f-125d-4b9f-9fa1-7671699256d9.json\":1,\"test/fixtures/questions/requests/954eba86-a232-4fed-b3ea-e629ebc1e649.json\":1,\"test/fixtures/questions/requests/9b4aa012-184e-4b0b-8c6f-fab11f0cb9e6.json\":1,\"test/fixtures/questions/requests/a4d33e90-1c2c-49bd-a4aa-2d8e3f6570f3.json\":1,\"test/fixtures/questions/requests/b8c51269-16c2-405f-91f9-50722fdedda9.json\":1,\"test/fixtures/questions/requests/c5e21f11-5172-4f9b-a506-9babcdfa47c2.json\":1,\"test/fixtures/questions/requests/c72be526-171a-41db-8444-bdde0205f87f.json\":1,\"test/fixtures/questions/requests/cd04b41d-3f6c-4fcd-a1c0-865a62fbd102.json\":1,\"test/fixtures/questions/requests/d5b04a1c-cefc-4177-98b8-b5908efec55e.json\":1,\"test/fixtures/questions/requests/dbcac6c2-6328-47a9-8e07-4c7b55f78e45.json\":1,\"test/fixtures/questions/requests/dcc0a889-47e2-4320-972e-6543c96eb98d.json\":1,\"test/fixtures/questions/requests/f9e472ad-8963-4c3f-9871-b14b4160a8af.json\":1,\"test/fixtures/questions/requests/index.json\":401,\"test/fixtures/questions/tools/build_conformance.py\":97,\"test/fixtures/questions/tools/build_house_feeds.py\":372,\"test/fixtures/questions/tools/build_request_fixtures.py\":74,\"test/fixtures/questions/tools/extract_reference.py\":32,\"test/fixtures/questions/tools/fetch_requests.py\":29,\"test/fixtures/questions/tools/qlib.py\":104,\"test/launch/LaunchKit.sol\":199,\"test/launch/LaunchManifest.t.sol\":340,\"test/launch/LaunchRunbook.t.sol\":311,\"test/launch/LaunchStateSetup.sol\":206,\"test/launch/LaunchTransferFailures.t.sol\":307,\"test/launch/fork/LaunchRehearsal.fork.t.sol\":508,\"test/launch/invariant/LaunchLifecycleHandler.sol\":453,\"test/launch/invariant/LaunchLifecycleInvariant.t.sol\":216,\"test/launch/invariant/README.md\":45,\"test/payroll/JobsReport.t.sol\":1093,\"test/payroll/JobsReportFuzz.t.sol\":258,\"test/payroll/JobsReportSetup.sol\":92,\"test/payroll/PayrollBooking.t.sol\":326,\"test/payroll/PayrollFeeds.t.sol\":747,\"test/payroll/PayrollFixture.t.sol\":121,\"test/payroll/PayrollFuzz.t.sol\":249,\"test/payroll/PayrollGas.t.sol\":253,\"test/payroll/PayrollLaunchAudit.t.sol\":111,\"test/payroll/PayrollScenario.t.sol\":97,\"test/payroll/PayrollSeats.t.sol\":293,\"test/payroll/PayrollSetup.sol\":176,\"test/payroll/PayrollStream.t.sol\":670,\"test/payroll/PayrollTips.t.sol\":650,\"test/payroll/audit/AuditReports.t.sol\":492,\"test/payroll/fork/LaunchAFork.t.sol\":268,\"test/payroll/fork/PayrollFork.t.sol\":320,\"test/payroll/integration/LaunchA.t.sol\":570,\"test/payroll/invariant/PayrollHandler.sol\":556,\"test/payroll/invariant/PayrollInvariant.t.sol\":185,\"test/payroll/mocks/MockSeats.sol\":132,\"test/payroll/mocks/MockTokens.sol\":212,\"test/payroll/mocks/QuestionsRig.sol\":106,\"test/questions/HouseFeedProofs.t.sol\":487,\"test/questions/HouseFeeds.t.sol\":335,\"test/questions/OracleConsumerConformance.t.sol\":146,\"test/questions/QuestionBody.t.sol\":263,\"test/questions/QuestionHashFixtures.t.sol\":153,\"test/questions/QuestionsAbandon.t.sol\":404,\"test/questions/QuestionsAnswers.t.sol\":996,\"test/questions/QuestionsCallbackGas.t.sol\":174,\"test/questions/QuestionsFeeds.t.sol\":573,\"test/questions/QuestionsFixture.sol\":246,\"test/questions/QuestionsInvariant.t.sol\":790,\"test/questions/QuestionsLaunchAudit.t.sol\":144,\"test/questions/QuestionsMeter.t.sol\":503,\"test/questions/QuestionsRequest.t.sol\":879,\"test/questions/QuestionsSharedAnswers.t.sol\":239,\"test/questions/QuestionsTips.t.sol\":560,\"test/questions/RealAttestations.t.sol\":229,\"test/questions/fork/IIntakeV2.sol\":29,\"test/questions/fork/QuestionsIntake.fork.t.sol\":418,\"test/questions/lib/CanonicalQuestion.sol\":106,\"test/questions/mocks/IntakeDelivery.sol\":42,\"test/questions/mocks/MockIMD.sol\":31,\"test/questions/mocks/MockIntake.sol\":149,\"test/questions/mocks/Oddities.sol\":240,\"test/questions/mocks/QuestionsHarness.sol\":32,\"test/questions/mocks/QuestionsVectorHarness.sol\":42,\"test/scaffold/Interfaces.t.sol\":16},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"5029c2676782267de6d24e23d69a1a1145fecb284b26c4c58cda19c2156ceda2","verifiedTreeHash":"8421ffdec17da6b673eb907553b41b29cc43c88c","verifierVersion":"0.1.0+327e1e9f"},{"checks":[{"durationMs":299751,"exitCode":0,"name":"build","output":"Compiling 115 files with Solc 0.8.26\nSolc 0.8.26 finished in 299.43s\nCompiler run successful!\n","passed":true},{"durationMs":5514,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/scaffold/Interfaces.t.sol:InterfacesCompileTest\n[PASS] test_oracleActionIsTheRightPaddedString() (gas: 217)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 93.98µs (28.33µs CPU time)\n\nRan 4 tests for test/questions/OracleConsumerConformance.t.sol:OracleConsumerConformanceTest\n[PASS] test_acceptsAFreshSignatureFromTheVectorKey() (gas: 156976)\n[PASS] test_acceptsTheProtocolSignatureAsDelivered() (gas: 155161)\n[PASS] test_callbackSelectorIsCanonical() (gas: 763)\n[PASS] test_digestMatchesTheProtocol() (gas: 10320)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 1.11ms (593.05µs CPU time)\n\nRan 1 test for test/questions/QuestionsCallbackGas.t.sol:CallbackGasZeroSumTest\n[PASS] test_callbackGas_staysUnderTheGate() (gas: 286649)\nLogs:\n  callback gas (uint256): 95896\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.19ms (225.73µs CPU time)\n\nRan 1 test for test/questions/QuestionsCallbackGas.t.sol:CallbackGasLongListTest\n[PASS] test_callbackGas_staysUnderTheGate() (gas: 409266)\nLogs:\n  callback gas (bytes32[]): 116654\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.26ms (255.93µs CPU time)\n\nRan 4 tests for test/payroll/PayrollFixture.t.sol:PayrollFixtureTest\n[PASS] test_fixture_agreesWithTheFrozenInterfaceAndAddresses() (gas: 121477)\n[PASS] test_fixture_recordedBindingPaysTheRecordedSeatOwner() (gas: 573710)\n[PASS] test_fixture_recordedUnknownAgentRevertMeansUnbound() (gas: 476158)\n[PASS] test_fixture_seatPoolPaysTheRecordedOwner() (gas: 559929)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 2.50ms (786.95µs CPU time)\n\nRan 2 tests for test/payroll/audit/AuditReports.t.sol:AuditBudgetBoundaryTest\n[PASS] test_report1_finding1_aBookingAtTheBoundaryReleasesNothing() (gas: 1203427)\n[PASS] test_report1_finding1_aOneWeiBookingAtTheBoundaryDoesNotStarveTheMeters() (gas: 1150062)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 2.88ms (1.53ms CPU time)\n\nRan 3 tests for test/payroll/PayrollGas.t.sol:PayrollFirstCallGasTest\n[PASS] test_gas_theFirstBookEver() (gas: 303422)\nLogs:\n  book, the first ever: 237338\n\n[PASS] test_gas_theFirstPayEver() (gas: 271088)\nLogs:\n  pay, the first ever: 263606\n\n[PASS] test_gas_theFirstTipEverToSixteenAgents() (gas: 516201)\nLogs:\n  tip, the first ever, 16 new ids and a remainder: 506058\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 3.04ms (327.06µs CPU time)\n\nRan 1 test for test/questions/QuestionsCallbackGas.t.sol:CallbackGasBoolNoTest\n[PASS] test_callbackGas_staysUnderTheGate() (gas: 286674)\nLogs:\n  callback gas (bool): 95922\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.56ms (992.06µs CPU time)\n\nRan 1 test for test/questions/QuestionsCallbackGas.t.sol:CallbackGasUint256Test\n[PASS] test_callbackGas_staysUnderTheGate() (gas: 306647)\nLogs:\n  callback gas (uint256): 115796\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.25ms (159.94µs CPU time)\n\nRan 6 tests for test/payroll/PayrollLaunchAudit.t.sol:PayrollLaunchAuditTest\n[PASS] test_audit_batchSkipsEscrowAndPaysOtherSeats() (gas: 301223)\n[PASS] test_audit_contractWalletBatchSkipsAnotherContractsSeat() (gas: 616059)\n[PASS] test_audit_contractWalletCanClaimItsOwnShareAndTip() (gas: 686551)\n[PASS] test_audit_escrowedTipCannotBeSweptWhileWaitingForItsOwner() (gas: 431294)\n[PASS] test_audit_observerCannotForceAgentTipIntoEscrow() (gas: 458386)\n[PASS] test_audit_observerCannotForceSeatShareIntoEscrow() (gas: 360064)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 4.16ms (1.48ms CPU time)\n\nRan 2 tests for test/payroll/audit/AuditReports.t.sol:AuditBudgetParkTest\n[PASS] test_report1_finding2_parkedIMDDoesNotTurnTheOldTrancheIntoStakerStream() (gas: 1505669)\n[PASS] test_report2_finding2_aFundAndDefundAroundFundFeedsChangesNothing() (gas: 7897859)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 6.77ms (5.42ms CPU time)\n\nRan 18 tests for test/payroll/JobsReport.t.sol:JobsReportCrownTest\n[PASS] test_crown_aShortListFillsFewerPlaces() (gas: 563481)\n[PASS] test_crown_needsAnAnsweredRound() (gas: 252511)\n[PASS] test_crown_onlyOncePerRound() (gas: 341300)\n[PASS] test_crown_readsARealAttestedList() (gas: 326038)\n[PASS] test_crown_readsAnyValidLayoutOfTheList() (gas: 316390)\n[PASS] test_crown_readsTheRealAttestedListOfThree() (gas: 338356)\n[PASS] test_crown_rejectsAttestedBytesThatAreNotAnAddressList() (gas: 903434)\n[PASS] test_crown_rejectsBytesThatAreNotTheAttestedOnes() (gas: 215611)\n[PASS] test_crown_revertsWhenQuestionsDoes() (gas: 171045)\n[PASS] test_crown_roundsMayBeCrownedInAnyOrder() (gas: 577635)\n[PASS] test_crown_storesTheTopThreeOfTheAttestedList() (gas: 375633)\n[PASS] test_views_aPageHoldsAtMostOneHundred() (gas: 22793428)\n[PASS] test_views_beforeAnythingExists() (gas: 67579)\n[PASS] test_views_countAtRevertsPastTheEnd() (gas: 322643)\n[PASS] test_views_pagesOfTheCounts() (gas: 1989247)\n[PASS] test_views_pagesOfTheHistory() (gas: 2046576)\n[PASS] test_views_printAtRevertsPastTheEnd() (gas: 352161)\n[PASS] test_views_summaryGathersTheRunningFigures() (gas: 1265592)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 10.07ms (9.20ms CPU time)\n\nRan 25 tests for test/payroll/PayrollBooking.t.sol:PayrollBookingTest\n[PASS] test_book_afterAFailedPayNothingIsLost() (gas: 531232)\n[PASS] test_book_doesNotBookTips() (gas: 264535)\n[PASS] test_book_neverCountsMoneyTwice() (gas: 598506)\n[PASS] test_book_returnsZeroWhenNothingArrived() (gas: 400125)\n[PASS] test_book_splitsAPlainTransfer() (gas: 554779)\n[PASS] test_constructor_constantsMatchTheBrief() (gas: 49078)\n[PASS] test_constructor_deploysAgainstAddressesWithoutCode() (gas: 33405)\n[PASS] test_constructor_revertsOnARepeatedFeed() (gas: 4867)\n[PASS] test_constructor_revertsOnAZeroAddress() (gas: 5224)\n[PASS] test_constructor_revertsOnZeroSeats() (gas: 4977)\n[PASS] test_constructor_storesEveryDependency() (gas: 46287)\n[PASS] test_implementsTheFrozenInterface() (gas: 18913)\n[PASS] test_ledger_accumulatesOverManyBookings() (gas: 2820407)\n[PASS] test_ledger_startsAtZero() (gas: 92372)\n[PASS] test_pay_anyoneMayPay() (gas: 390755)\n[PASS] test_pay_booksWhatArrivedNotWhatWasAsked() (gas: 1056077)\n[PASS] test_pay_memoDoesNotChangeTheSplit() (gas: 391027)\n[PASS] test_pay_oneWeiIsAllStakers() (gas: 354256)\n[PASS] test_pay_revertsWithoutAnAllowance() (gas: 100741)\n[PASS] test_pay_revertsWithoutTheBalance() (gas: 99099)\n[PASS] test_pay_roundingRemainderGoesToStakers() (gas: 415849)\n[PASS] test_pay_splitsFiftyThirtyTwenty() (gas: 468414)\n[PASS] test_pay_zeroDoesNothingAndDoesNotRevert() (gas: 60506)\n[PASS] test_tokenUsedIsTheConstructorArgument() (gas: 9014)\n[PASS] test_unbookedIgnoresABalanceBelowWhatIsOwed() (gas: 563025)\nSuite result: ok. 25 passed; 0 failed; 0 skipped; finished in 7.59ms (4.38ms CPU time)\n\nRan 19 tests for test/payroll/JobsReport.t.sol:JobsReportCountsTest\n[PASS] test_counts_aCatchUpCountIsRecordedAndJoinsNoPrint() (gas: 1402086)\n[PASS] test_counts_aCountForADayThatWasNeverPrintedIsStillRecorded() (gas: 769942)\n[PASS] test_counts_aCountJoinsThePrintForTheSameWindow() (gas: 608229)\n[PASS] test_counts_aFailedRoundIsPassedOverAndTheRetryCounts() (gas: 670364)\n[PASS] test_counts_aFeedThatDriftedStillPairsEveryDay() (gas: 4278984)\n[PASS] test_counts_aLongRunOfUncountedPrintsIsWorkedThroughInBoundedSteps() (gas: 4035614)\n[PASS] test_counts_aLongerPrintDoesNotTakeADaysCount() (gas: 1157826)\n[PASS] test_counts_aMissedDayDoesNotShiftLaterCounts() (gas: 1167901)\n[PASS] test_counts_aShiftOfExactlyHalfJoinsNeither() (gas: 1197100)\n[PASS] test_counts_aShiftOfMoreThanHalfJoinsTheNextDay() (gas: 1235366)\n[PASS] test_counts_aZeroCountIsACount() (gas: 425205)\n[PASS] test_counts_anAnswerThatArrivesFirstIsRecordedThenPaired() (gas: 694721)\n[PASS] test_counts_anAnswerThatArrivesLaterIsAttachedThen() (gas: 632189)\n[PASS] test_counts_neverCountABlockTwice() (gas: 854043)\n[PASS] test_counts_pairWithThePrintTheyMostlyShare() (gas: 1302623)\n[PASS] test_counts_shareTheEightRoundsWithPayrolls() (gas: 2499786)\n[PASS] test_counts_theReportIsTheSameWheneverPrintIsCalled() (gas: 3772691)\n[PASS] test_counts_unusableAnswersArePassedOver() (gas: 957387)\n[PASS] test_print_neverReadsTheEmployersFeed() (gas: 1016160)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 10.88ms (10.02ms CPU time)\n\nRan 12 tests for test/payroll/PayrollGas.t.sol:PayrollGasTest\n[PASS] test_gas_book() (gas: 100431)\nLogs:\n  book: 98189\n\n[PASS] test_gas_claimAFullListOfSeats() (gas: 11892534)\nLogs:\n  claimSeats, 200 seats of 200 owners: 11845163\n\n[PASS] test_gas_claimSeat() (gas: 108465)\nLogs:\n  claimSeat: 105937\n\n[PASS] test_gas_claimTip() (gas: 117265)\nLogs:\n  claimTip: 119398\n\n[PASS] test_gas_claimTwentySeats() (gas: 1235653)\nLogs:\n  claimSeats, 20 seats of 20 owners: 1229322\n\n[PASS] test_gas_crown() (gas: 296496)\nLogs:\n  crown, list of 10: 177671\n\n[PASS] test_gas_drip() (gas: 71515)\nLogs:\n  drip: 68833\n\n[PASS] test_gas_fundFeeds() (gas: 172786)\nLogs:\n  fundFeeds, one meter topped up: 190268\n\n[PASS] test_gas_pay() (gas: 110924)\nLogs:\n  pay: 103380\n\n[PASS] test_gas_print() (gas: 234600)\nLogs:\n  print, one period with its count: 232314\n\n[PASS] test_gas_tipToFourKnownAgents() (gas: 85536)\nLogs:\n  tip, 4 ids already owed: 77631\n\n[PASS] test_gas_tipToSixteenNewAgents() (gas: 437629)\nLogs:\n  tip, 16 new ids: 427165\n\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 11.81ms (7.04ms CPU time)\n\nRan 1 test for test/payroll/PayrollGas.t.sol:PayrollAgedTipGasTest\n[PASS] test_gas_tipToSixteenAgentsWhoseEarlierTipsMustBeAged() (gas: 569443)\nLogs:\n  tip, 16 ids with tips to age: 553983\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 4.89ms (151.29µs CPU time)\n\nRan 6 tests for test/questions/QuestionsSharedAnswers.t.sol:QuestionsSharedAnswersTest\n[PASS] test_aTwinAppliesItsOwnPanelFloorToASharedAnswer() (gas: 1988851)\n[PASS] test_aTwinCannotTakeTheAnswerBeforeItsOwnRequestHasEnded() (gas: 2056303)\n[PASS] test_aTwinMayUseAnAnswerAfterTheFeedThatPaidForIt() (gas: 2071514)\n[PASS] test_anAnswerUsedOnATwinStillReachesTheFeedThatPaidForIt() (gas: 2168354)\n[PASS] test_anAttestationAnswersEachFeedOnce() (gas: 3417465)\n[PASS] test_submitStillRescuesTheFeedThatPaidAfterATwinUsedTheAnswer() (gas: 2220650)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 6.45ms (5.25ms CPU time)\n\nRan 2 tests for test/payroll/PayrollGas.t.sol:PayrollAgeingPayGasTest\n[PASS] test_gas_fundFeedsThatAlsoReleasesTheWaitingFeedBudget() (gas: 241360)\nLogs:\n  fundFeeds, one meter topped up and the waiting budget released: 261090\n\n[PASS] test_gas_payThatAlsoAgesTheWaitingFeedBudget() (gas: 184536)\nLogs:\n  pay, with the feed budget aged: 128509\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 5.49ms (1.77ms CPU time)\n\nRan 31 tests for test/payroll/PayrollFeeds.t.sol:PayrollFeedsTest\n[PASS] test_budget_aBookingAgesTheBudgetAndReleasesNothing() (gas: 866664)\n[PASS] test_budget_aLongSilenceReleasesAllOfIt() (gas: 838080)\n[PASS] test_budget_aPartialTopUpTakesOnlyWhatLeftOutOfWhatIsDue() (gas: 1382469)\n[PASS] test_budget_aRefusedTopUpDoesNotHoldBackWhatIsDue() (gas: 1131593)\n[PASS] test_budget_dueIsSpentBeforeOldAndOldBeforeFresh() (gas: 2306513)\n[PASS] test_budget_isKeptThroughOneBoundaryAndReleasedAtTheNext() (gas: 938161)\n[PASS] test_budget_metersAreServedBeforeAnythingIsReleased() (gas: 1318379)\n[PASS] test_budget_releasedMoneyReachesStakersThroughTheStream() (gas: 21073089)\n[PASS] test_budget_spendingComesOutOfTheOldTrancheFirst() (gas: 1417779)\n[PASS] test_budget_whoCrossesTheBoundaryFirstDoesNotMatter() (gas: 2731390)\n[PASS] test_callBackDuringATopUp_isRefused() (gas: 980435)\n[PASS] test_feedShortfalls_reportsWhatEachMeterLacks() (gas: 93606)\n[PASS] test_fundFeeds_capsTheCostItAssumes() (gas: 940962)\n[PASS] test_fundFeeds_doesNotCountWhatOthersPutOnAMeter() (gas: 1328055)\n[PASS] test_fundFeeds_goesNoFurtherThanTheRunway() (gas: 1170295)\n[PASS] test_fundFeeds_replacesOnlyPayrollsPartOfWhatAMeterSpent() (gas: 1473224)\n[PASS] test_fundFeeds_revertsIfATopUpTakesMoreThanItWasOffered() (gas: 1606421)\n[PASS] test_fundFeeds_skipsAFeedQuestionsDoesNotKnow() (gas: 694931)\n[PASS] test_fundFeeds_skipsAFeedWhoseActionIsNotSold() (gas: 675111)\n[PASS] test_fundFeeds_theBalanceCoversWhatIsOwedInTheMiddleOfATopUp() (gas: 1040888)\n[PASS] test_fundFeeds_theFirstTwoFeedsShareAShortBudgetByNeed() (gas: 784980)\n[PASS] test_fundFeeds_theThirdFeedTakesOnlyWhatTheFirstTwoLeave() (gas: 1152539)\n[PASS] test_fundFeeds_topsEachMeterUpToItsRunway() (gas: 942523)\n[PASS] test_fundFeeds_unevenNeedsGetTheSameFraction() (gas: 851727)\n[PASS] test_fundFeeds_whatDidNotLeaveGoesBackWhereItCameFrom() (gas: 1777429)\n[PASS] test_fundFeeds_withNoBudgetDoesNothing() (gas: 63780)\n[PASS] test_questionsAnswersNonsense_fundsNothing() (gas: 908461)\n[PASS] test_questionsDown_blocksNothing() (gas: 1589090)\n[PASS] test_questionsFundReverts_keepsTheBudgetAndClearsTheAllowance() (gas: 661663)\n[PASS] test_questionsWithoutCode_fundsNothing() (gas: 372098)\n[PASS] test_topUpThatMovesLess_isBookedByWhatLeft() (gas: 942591)\nSuite result: ok. 31 passed; 0 failed; 0 skipped; finished in 19.96ms (18.51ms CPU time)\n\nRan 1 test for test/questions/QuestionsCallbackGas.t.sol:CallbackGasAddressListTest\n[PASS] test_callbackGas_staysUnderTheGate() (gas: 316872)\nLogs:\n  callback gas (address[]): 115936\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 994.62µs (179.72µs CPU time)\n\nRan 1 test for test/questions/QuestionsCallbackGas.t.sol:CallbackGasAddressTest\n[PASS] test_callbackGas_staysUnderTheGate() (gas: 306636)\nLogs:\n  callback gas (address): 115833\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 896.71µs (143.75µs CPU time)\n\nRan 8 tests for test/questions/HouseFeedProofs.t.sol:HouseFeedProofsTest\n[PASS] test_proofs_aChangedAnswerIsRefused() (gas: 4221446)\n[PASS] test_proofs_eachAnswerDecodesUnderItsFeedsAnswerType() (gas: 303905)\n[PASS] test_proofs_theBodyThatWasBoughtIsTheBodyTheContractSends() (gas: 366362)\n[PASS] test_proofs_theContractsQuestionHashIsTheAttestedOne() (gas: 345997)\n[PASS] test_proofs_theDocumentStatesWhatTheRecordsHold() (gas: 999990)\n[PASS] test_proofs_theFirstEmployersBodyWasNotAttested() (gas: 160931)\n[PASS] test_proofs_thePanelTheSignerAndTheValidityAreWhatTheFeedsRequire() (gas: 311187)\n[PASS] test_proofs_theRealSignedAnswersPassEveryCheckOfTheCallback() (gas: 12655798)\nLogs:\n  callback gas, real answer, payrolls: 115835\n  callback gas, real answer, hires: 115835\n  callback gas, real answer, employers: 115975\n\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 32.18ms (31.82ms CPU time)\n\nRan 11 tests for test/questions/HouseFeeds.t.sol:HouseFeedsTest\n[PASS] test_employersAcceptsAValidDeliveryAfterTwelveHours() (gas: 3212101)\n[PASS] test_employersIsJudgedByThePanelWithItsMethodPinned() (gas: 96658)\n[PASS] test_employersTakesAnswersFromTheIntakeOnlyAndOnlyWithTheQuorumMet() (gas: 3324032)\n[PASS] test_exampleBodiesAreWhatTheContractSends() (gas: 6565117)\n[PASS] test_feedIdsRecomputeFromTheirParts() (gas: 230824)\n[PASS] test_feedsAreAcceptedOnMainnet() (gas: 3129843)\n[PASS] test_feedsAreRefusedOffMainnet() (gas: 102440)\n[PASS] test_hiresSaysItCountsZeroValueTransfers() (gas: 277917)\n[PASS] test_prefixesAreTheCanonicalFormOfTheBody() (gas: 1725262)\n[PASS] test_recipesNameTheTokenAndThePayee() (gas: 385426)\n[PASS] test_theWaitsFitTheHouseFeeds() (gas: 199551)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 35.37ms (34.25ms CPU time)\n\nRan 41 tests for test/questions/QuestionsAnswers.t.sol:QuestionsAnswersTest\n[PASS] test_callback_aNoIsStoredNotReverted() (gas: 2310665)\n[PASS] test_callback_aZeroSumIsStoredNotReverted() (gas: 1050886)\n[PASS] test_callback_aboutAnotherChain_reverts() (gas: 1004658)\n[PASS] test_callback_afterAbandon_reverts() (gas: 1061279)\n[PASS] test_callback_anEmptyListIsStored() (gas: 1692663)\n[PASS] test_callback_answersAQuestionAPanelJudges() (gas: 1496115)\n[PASS] test_callback_everyAnswerTypeBecomesOneWord() (gas: 7641557)\n[PASS] test_callback_expired_reverts() (gas: 1183349)\n[PASS] test_callback_fitsTheStipend_evenALoweredOne() (gas: 1733050)\n[PASS] test_callback_forASettledId_reverts() (gas: 1216416)\n[PASS] test_callback_forAnUnknownId_reverts() (gas: 973590)\n[PASS] test_callback_forAnotherWindow_reverts() (gas: 1187524)\n[PASS] test_callback_fromASmallerPanel_reverts() (gas: 1347597)\n[PASS] test_callback_fromAnyoneButTheIntake_reverts() (gas: 1001720)\n[PASS] test_callback_issuedInTheFuture_reverts() (gas: 1110986)\n[PASS] test_callback_lenientFeed_takesARerunSettledAnswerDownToItsFloor() (gas: 1840946)\n[PASS] test_callback_malformedAnswers_revert() (gas: 4230220)\n[PASS] test_callback_ofAnotherType_reverts() (gas: 1009085)\n[PASS] test_callback_replayed_reverts() (gas: 2304035)\n[PASS] test_callback_signedByAnotherKey_reverts() (gas: 956891)\n[PASS] test_callback_signedForAnotherConsumerOrChain_reverts() (gas: 1070193)\n[PASS] test_callback_storesTheAnswer() (gas: 1135753)\n[PASS] test_callback_strictFeed_needsAgreedAtLeastTheSignedQuorum() (gas: 1348331)\n[PASS] test_callback_tampered_reverts() (gas: 2051428)\n[PASS] test_callback_theIntakeRefusesToStarveIt() (gas: 956606)\n[PASS] test_callback_toAnotherQuestion_reverts() (gas: 1007334)\n[PASS] test_callback_unpinnedFeed_ignoresTheQuestionHashOnly() (gas: 1839634)\n[PASS] test_callback_withAnotherBlockHash_reverts() (gas: 1186502)\n[PASS] test_reveal_isOnlyForListFeeds() (gas: 1093640)\n[PASS] test_reveal_publishesTheListBehindARound() (gas: 1844926)\n[PASS] test_submit_afterARequestThatEndedWithoutAnAnswer() (gas: 1094637)\n[PASS] test_submit_anAnswerToAnotherFeed_reverts() (gas: 2237423)\n[PASS] test_submit_appliesEveryCheckTheCallbackDoes() (gas: 1746421)\n[PASS] test_submit_beforeTheIntakeHasCompletedTheRequest_reverts() (gas: 1561175)\n[PASS] test_submit_deliversAnAnswerTheCallbackMissed() (gas: 1378168)\n[PASS] test_submit_isNotForAQuestionAPanelJudges() (gas: 1748037)\n[PASS] test_submit_needsAPinnedQuestion() (gas: 1725495)\n[PASS] test_submit_opensThirtyMinutesAfterARequestTheIntakeNeverCompleted() (gas: 1361507)\n[PASS] test_submit_panelEvidenceIsReadFromTheDocumentNotTheWording() (gas: 1747953)\n[PASS] test_submit_withAnIntakeThatCannotBeRead_waitsTheThirtyMinutes() (gas: 8098978)\n[PASS] test_submit_withoutAPendingRoundOrAFeed_reverts() (gas: 79399)\nSuite result: ok. 41 passed; 0 failed; 0 skipped; finished in 42.49ms (39.72ms CPU time)\n\nRan 25 tests for test/questions/QuestionsFeeds.t.sol:QuestionsFeedsTest\n[PASS] testFuzz_checkFeed_saysWhatCreateFeedDoes(uint16,uint16,uint16,uint32,uint32,uint32,uint16,bool,uint96) (runs: 256, μ: 79960, ~: 65536)\n[PASS] testFuzz_feedIdOf_isTheDocumentedHash((bytes32,uint64,uint8,uint16,uint16,uint16,uint32,uint32,uint32,uint16,bool,bool,uint96,uint96,uint8,address,uint256,bytes),bytes,bytes) (runs: 256, μ: 15420, ~: 15418)\n[PASS] test_constructor_fixesItsThreeAddresses() (gas: 22263)\n[PASS] test_constructor_makesNoCallAndNeedsNoCode() (gas: 15638)\n[PASS] test_constructor_refusesZeroAddresses() (gas: 8710)\n[PASS] test_createFeed_acceptsEveryAnswerTypeByItsProtocolName() (gas: 3218414)\n[PASS] test_createFeed_idDependsOnEveryPart() (gas: 2373857)\n[PASS] test_createFeed_refusesABodyLongerThanTheIntakeTakes() (gas: 30985896)\n[PASS] test_createFeed_refusesALagOutsideFiveTo256() (gas: 1067203)\n[PASS] test_createFeed_refusesAPrefixThatIsNotTheFeedsCanonicalDocument() (gas: 272734)\n[PASS] test_createFeed_refusesATailThatDisagreesWithTheFeed() (gas: 1068658)\n[PASS] test_createFeed_refusesATipAboveThePriceCap() (gas: 1096300)\n[PASS] test_createFeed_refusesAZeroAction() (gas: 53373)\n[PASS] test_createFeed_refusesAZeroPriceCap() (gas: 54991)\n[PASS] test_createFeed_refusesAnUnknownAnswerType() (gas: 52539)\n[PASS] test_createFeed_refusesAnotherChain() (gas: 53839)\n[PASS] test_createFeed_refusesBadPanels() (gas: 1769113)\n[PASS] test_createFeed_refusesGateFieldsThatContradict() (gas: 1115258)\n[PASS] test_createFeed_refusesValidityOutsideTheProtocolsRange() (gas: 1065331)\n[PASS] test_createFeed_refusesWindowsThatCannotWork() (gas: 1635872)\n[PASS] test_createFeed_roomAboveTheCadenceIsWhatCatchesUp() (gas: 3632675)\n[PASS] test_createFeed_storesTheFeedAndSaysSo() (gas: 634451)\n[PASS] test_createFeed_twiceIsHarmless() (gas: 719897)\n[PASS] test_thereIsNoOwnerAndNoSetter() (gas: 196072)\n[PASS] test_unknownFeed_readsAsEmptyAndRevertsWhereItMust() (gas: 259910)\nSuite result: ok. 25 passed; 0 failed; 0 skipped; finished in 51.66ms (50.36ms CPU time)\n\nRan 8 tests for test/questions/RealAttestations.t.sol:RealAttestationsTest\n[PASS] test_liveOracleSignaturesVerifyInOurDomain() (gas: 6723934)\n[PASS] test_realAddress_acceptedEndToEnd() (gas: 6653405)\n[PASS] test_realAttestation_tamperedIsRefused() (gas: 4277361)\n[PASS] test_realLogSum_acceptedEndToEnd() (gas: 4335739)\n[PASS] test_realNo_storedNotReverted() (gas: 3160595)\n[PASS] test_realPanelNumber_acceptedEndToEnd() (gas: 4556402)\n[PASS] test_realYes_acceptedEndToEnd() (gas: 3079094)\n[PASS] test_realYes_nonAsciiQuestion_acceptedEndToEnd() (gas: 3114532)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 21.32ms (23.00ms CPU time)\n\nRan 3 tests for test/payroll/PayrollSeats.t.sol:PayrollSeatCarryTest\n[PASS] test_carry_claimsNeverExceedWhatThePoolWasGiven() (gas: 15192479)\n[PASS] test_carry_poolSmallerThanTheSeatCountPaysNobodyYet() (gas: 456396)\n[PASS] test_carry_weiThatDoNotDivideWaitForTheNextCredit() (gas: 543833)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 10.91ms (9.46ms CPU time)\n\nRan 12 tests for test/questions/QuestionsAbandon.t.sol:QuestionsAbandonTest\n[PASS] test_abandon_aLateAnswerThatMissedItsCallbackCanStillBeSubmitted() (gas: 1377187)\n[PASS] test_abandon_afterACallbackThatFailed() (gas: 1179833)\n[PASS] test_abandon_afterTheFullSilenceDeadline() (gas: 1131780)\n[PASS] test_abandon_cannotUndoAnAnswer() (gas: 1100958)\n[PASS] test_abandon_doesNotDependOnTheIntakeBehaving() (gas: 9763481)\n[PASS] test_abandon_failStreakSaturates() (gas: 111009761)\n[PASS] test_abandon_theFullSilenceDeadlineIsAlwaysEnough() (gas: 1611003)\n[PASS] test_abandon_theWaitIsNotCarriedIntoTheNextRound() (gas: 2959961)\n[PASS] test_abandon_thenTheFeedAsksAgain() (gas: 1637874)\n[PASS] test_abandon_thirtyMinutesAfterCompletionIsSeen() (gas: 1991044)\n[PASS] test_abandon_withNothingPending_reverts() (gas: 1611777)\n[PASS] test_waits_areTheValuesFixedAtLaunch() (gas: 27373)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 62.06ms (63.95ms CPU time)\n\nRan 15 tests for test/payroll/PayrollSeats.t.sol:PayrollSeatsTest\n[PASS] test_claimSeat_cannotTouchAnotherSeatsShare() (gas: 390074)\n[PASS] test_claimSeat_followsTheSeatWhenItChangesHands() (gas: 381544)\n[PASS] test_claimSeat_paysTheCurrentWalletOwner() (gas: 241092)\n[PASS] test_claimSeat_paysTheOwnerWhoeverCalls() (gas: 329499)\n[PASS] test_claimSeat_rejectsAnOwnerThatIsNotAnAddress() (gas: 1092258)\n[PASS] test_claimSeat_revertsForAnIdThatIsNotASeat() (gas: 55250)\n[PASS] test_claimSeat_secondClaimPaysNothing() (gas: 173674)\n[PASS] test_claimSeat_waitsWhileOwnerOfReverts() (gas: 469797)\n[PASS] test_claimSeat_whenTheSeatTokenHasNoCode() (gas: 359935)\n[PASS] test_claimSeats_emptyAndAllSkippedListsPayNothing() (gas: 206578)\n[PASS] test_claimSeats_paysNeighboursWithOneOwnerInOneTransfer() (gas: 427848)\n[PASS] test_claimSeats_revertsAboveTheListLimit() (gas: 325258)\n[PASS] test_claimSeats_skipsWhatItCannotPayAndPaysTheRest() (gas: 416871)\n[PASS] test_everySeatGetsTheSameAndThePoolIsNeverOverpaid() (gas: 119051150)\n[PASS] test_seatOwnedByPayrollRecyclesItsShare() (gas: 390574)\nSuite result: ok. 15 passed; 0 failed; 0 skipped; finished in 65.58ms (47.47ms CPU time)\n\nRan 6 tests for test/payroll/audit/AuditReports.t.sol:AuditStreamTest\n[PASS] testFuzz_report2_finding3_theRuleForWhenABookingSlowsTheOldMoney(uint256,uint256) (runs: 256, μ: 532622, ~: 534697)\n[PASS] test_report1_finding3_aBookingDelaysMoneyAlreadyVestingUpToSevenDays() (gas: 32142301)\n[PASS] test_report1_finding4_dueNowIsZeroWhileTheVaultHasNoStakers() (gas: 657177)\n[PASS] test_report2_finding3_aBookingEqualToTheRemainderOneHourBeforeTheEnd() (gas: 501383)\n[PASS] test_report2_finding3_dustAgainstARemainderThatIsDustMovesTheEnd() (gas: 1431677)\n[PASS] test_report2_finding4_dueNowIsZeroWhileTheVaultHasNoCode() (gas: 502604)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 67.92ms (67.18ms CPU time)\n\nRan 23 tests for test/payroll/JobsReport.t.sol:JobsReportPrintTest\n[PASS] test_bestDay_aTieKeepsTheEarlierDay() (gas: 489466)\n[PASS] test_bestDay_isTheLargestSingleDay() (gas: 1214325)\n[PASS] test_bestDay_windowLengthLimitIsInclusive() (gas: 494312)\n[PASS] test_constructor_deploysBeforeQuestionsHasCode() (gas: 7511)\n[PASS] test_constructor_revertsOnARepeatedFeed() (gas: 6570)\n[PASS] test_constructor_revertsOnAZeroQuestions() (gas: 4327)\n[PASS] test_constructor_storesTheFeeds() (gas: 21451)\n[PASS] test_print_aWindowNotOverYetIsPassedOverForGood() (gas: 720739)\n[PASS] test_print_acceptsAZeroDay() (gas: 239318)\n[PASS] test_print_neverCountsABlockTwice() (gas: 886097)\n[PASS] test_print_passesOverAFailedRound() (gas: 452097)\n[PASS] test_print_passesOverAWindowThatIsEmptyOrNotOverYet() (gas: 684384)\n[PASS] test_print_passesOverAnAnswerTooLargeToBeAFigure() (gas: 562383)\n[PASS] test_print_readsAtMostEightRoundsACall() (gas: 3667373)\n[PASS] test_print_revertsOnlyWhenQuestionsDoes() (gas: 352079)\n[PASS] test_print_skippedRoundsCountAgainstTheEight() (gas: 1090901)\n[PASS] test_print_stopsAtAPendingRoundAndResumesWhenItIsAnswered() (gas: 796441)\n[PASS] test_print_storesAnAnsweredRound() (gas: 407865)\n[PASS] test_print_withNothingToReadChangesNothing() (gas: 76600)\n[PASS] test_streak_aCatchUpWindowAfterAMissedDayEndsIt() (gas: 1349490)\n[PASS] test_streak_aWindowThatStartsOneBlockLateBreaksIt() (gas: 513389)\n[PASS] test_streak_countsContiguousPrintsAndResetsOnAGap() (gas: 1184453)\n[PASS] test_streak_windowLengthLimitIsInclusive() (gas: 780460)\nSuite result: ok. 23 passed; 0 failed; 0 skipped; finished in 90.21ms (4.80ms CPU time)\n\nRan 32 tests for test/payroll/PayrollStream.t.sol:PayrollStreamTest\n[PASS] testFuzz_booking_weightedEndIsBetweenTheTwoTimes(uint256,uint256) (runs: 256, μ: 301084, ~: 304691)\n[PASS] test_booking_aLargeBookingStillTakesAboutSevenDays() (gas: 132352)\n[PASS] test_booking_afterTheStreamEnded_takesSevenDays() (gas: 131796)\n[PASS] test_booking_anOldLargeCapDoesNotOutliveItsBacklog() (gas: 11173291)\n[PASS] test_booking_hourlyDustDoesNotStretchTheStream() (gas: 25305728)\n[PASS] test_booking_joinsTheStreamAtTheWeightedEndTime() (gas: 334841)\n[PASS] test_booking_neverPushesTheEndPastSevenDaysOrBeforeTheOldEnd() (gas: 149934)\n[PASS] test_booking_ofDustAsTheStreamEndsDoesNotTrapItsLastHour() (gas: 11566153)\n[PASS] test_booking_ofDustCannotHoldBackVestedMoney() (gas: 3716746)\n[PASS] test_booking_ofDustDoesNotMoveTheEnd() (gas: 594964)\n[PASS] test_booking_ofDustWithABacklogWaitingLeavesItReachable() (gas: 30811976)\n[PASS] test_booking_steadyTrafficNeverDelaysMoneyPastSevenDays() (gas: 63038416)\n[PASS] test_drip_afterTheStreamEndsTheBacklogStillLeavesInCappedCalls() (gas: 10953832)\n[PASS] test_drip_deliversTheWholeStreamAndNoMore() (gas: 24805393)\n[PASS] test_drip_isCappedAtOneHourOfStream() (gas: 592332)\n[PASS] test_drip_nothingHasVestedInTheBookingBlock() (gas: 68673)\n[PASS] test_drip_oneWeiStreamCanBeEmptied() (gas: 370631)\n[PASS] test_drip_revertsInsideTheTenMinuteGap() (gas: 188160)\n[PASS] test_drip_revertsWhenTheVaultAnswersTooShort() (gas: 675238)\n[PASS] test_drip_revertsWhenTheVaultHasNoCode() (gas: 372718)\n[PASS] test_drip_revertsWhenTheVaultIsOverAnotherAsset() (gas: 700400)\n[PASS] test_drip_revertsWhenTheVaultReverts() (gas: 679117)\n[PASS] test_drip_sendsWhatVestedToSIMD() (gas: 307982)\n[PASS] test_drip_waitsWhileTheVaultHasNoStakers() (gas: 1667968)\n[PASS] test_drip_withNoRevenueSendsNothing() (gas: 107545)\n[PASS] test_stream_viewAgreesWithDrip() (gas: 132421)\n[PASS] test_stuckVaultDoesNotBlockTheRestOfPayroll() (gas: 894580)\n[PASS] test_visitor_aStakerOfTheSameSizeWhoStaysGetsTheSame() (gas: 11718769)\n[PASS] test_visitor_oneVisitTakesItsShareOfOneCappedDrip() (gas: 377150)\n[PASS] test_visitor_repeatedOverAWholeStreamTakesItsProRataShareAndNoMore() (gas: 39974689)\nLogs:\n  the stream (IMD): 168.000000000000000000\n  the visitor's gain (IMD): 83.999999999999999832\n  the gain of the staker who stayed (IMD): 84.000000000000000167\n\n[PASS] test_visitor_withTheHoldAStakeDripLeaveTransactionReverts() (gas: 528274)\n[PASS] test_visitor_withoutTheHoldTheSameShareNeedsNoCapitalAtAll() (gas: 28830211)\nLogs:\n  taken with borrowed IMD and no hold (IMD): 82.271412149542436809\n\nSuite result: ok. 32 passed; 0 failed; 0 skipped; finished in 96.60ms (168.15ms CPU time)\n\nRan 1 test for test/payroll/PayrollScenario.t.sol:PayrollScenarioTest\n[PASS] test_scenario_fortyFiveDays() (gas: 85432484)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 109.12ms (105.58ms CPU time)\n\nRan 5 tests for test/questions/QuestionHashFixtures.t.sol:QuestionHashFixturesTest\n[PASS] test_everyAttestedQuestionHashIsRebuilt() (gas: 13722722)\n[PASS] test_fixturesCoverEveryShapeTheFeedsUse() (gas: 418668)\n[PASS] test_hashIsRebuiltFromBodiesSentOnChain() (gas: 2279133)\n[PASS] test_quoteFollowsJsonStringify() (gas: 41366)\n[PASS] test_theRuleNeedsBothRefinements() (gas: 222823)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 145.05ms (40.53ms CPU time)\n\nRan 2 tests for test/payroll/PayrollFuzz.t.sol:PayrollSeatFuzzTest\n[PASS] testFuzz_seatPool_paysEachSeatExactlyItsShare(uint64[10],uint8[10]) (runs: 256, μ: 3252265, ~: 3266127)\n[PASS] testFuzz_seat_claimsDoNotMoveAnotherSeatsShare(uint64,uint8,uint8,uint8) (runs: 256, μ: 578290, ~: 556794)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 146.45ms (221.72ms CPU time)\n\nRan 18 tests for test/questions/QuestionsTips.t.sol:QuestionsTipsTest\n[PASS] testFuzz_returnedTip_keepsEveryMeterRuleIntact(uint256,uint256,uint256,uint256,uint256,bool) (runs: 256, μ: 2274809, ~: 1991591)\n[PASS] test_returnedTip_aFunderThatArrivesWhileTheRoundIsPendingSharesIt() (gas: 1153112)\n[PASS] test_returnedTip_afterTheMeterWasRefilledFromZero() (gas: 1635376)\n[PASS] test_returnedTip_isSharedByTheFundersInProportion() (gas: 1739836)\n[PASS] test_returnedTip_neverLiftsAShareAboveOneWei() (gas: 1058967)\n[PASS] test_returnedTip_withEveryFunderGone_belongsToNobody() (gas: 2012996)\n[PASS] test_tip_aFeedWithoutATipHoldsNothing() (gas: 2100525)\n[PASS] test_tip_eachRoundHasItsOwnOutcome() (gas: 3310847)\n[PASS] test_tip_followsTheRoundsStatus() (gas: 1177251)\n[PASS] test_tip_goesBackToTheMeterWhenTheRoundFails() (gas: 1031538)\n[PASS] test_tip_goesBackWhenARefusedRequestIsClosedInTwoSteps() (gas: 987335)\n[PASS] test_tip_isEarnedByTheKeeperThatHandsItsOwnAnswerIn() (gas: 1241199)\n[PASS] test_tip_isEarnedWhenTheIntakeDeliversTheAnswer() (gas: 1251491)\n[PASS] test_tip_isSetAsideWhenARoundOpens() (gas: 868456)\n[PASS] test_tip_ofARoundWhoseCallbackIsLateStaysWithTheOpener() (gas: 1499573)\n[PASS] test_tip_onlyAnsweredRoundsPay() (gas: 3749761)\n[PASS] test_tip_staysWithTheOpenerWhenAnotherAccountSubmits() (gas: 1343128)\n[PASS] test_tip_twoKeepersAreKeptApart() (gas: 1868333)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 150.13ms (159.33ms CPU time)\n\nRan 10 tests for test/questions/QuestionBody.t.sol:QuestionBodyTest\n[PASS] testFuzz_builderMatchesTheReference(bytes,bytes,uint64,uint64) (runs: 256, μ: 41085, ~: 39637)\n[PASS] testFuzz_contractSendsTheReferenceBody(uint256,uint32,uint8,bool) (runs: 256, μ: 1435151, ~: 1395060)\n[PASS] testFuzz_hasNumber_matchesOnlyTheSameNumber(uint256,uint256,bool) (runs: 256, μ: 27111, ~: 20851)\n[PASS] testFuzz_holdsPanelEvidence_matchesAPlainSearch(bytes,bytes,bool,uint8) (runs: 256, μ: 48633, ~: 43835)\n[PASS] test_builder_edges() (gas: 25217)\n[PASS] test_hasNumber_wantsTheWholeNumber() (gas: 126459)\n[PASS] test_holdsPanelEvidence_findsTheBytesAnywhere() (gas: 65728)\n[PASS] test_holdsPanelEvidence_readsNothingPastTheText() (gas: 361573)\n[PASS] test_prefixStart_isCanonicalForEveryType() (gas: 17449)\n[PASS] test_startsWith_endsWith() (gas: 41898)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 350.08ms (224.86ms CPU time)\n\nRan 7 tests for test/payroll/PayrollFuzz.t.sol:PayrollFuzzTest\n[PASS] testFuzz_book_splitsExactlyLikePay(uint256) (runs: 256, μ: 645658, ~: 661902)\n[PASS] testFuzz_feedBudget_waitsBetweenOneAndTwoFortnights(uint96,uint32) (runs: 256, μ: 512744, ~: 506040)\n[PASS] testFuzz_feeds_neverFundBeyondTheRunwayOrTheBudget(uint256,uint256,uint64[3]) (runs: 256, μ: 1735411, ~: 1741433)\n[PASS] testFuzz_split_holdsOverManyBookings(uint96[8]) (runs: 256, μ: 1117734, ~: 1131674)\n[PASS] testFuzz_split_isExactAndFavoursStakers(uint256) (runs: 256, μ: 431501, ~: 439575)\n[PASS] testFuzz_stream_paysEverythingAndNeverMoreThanTheCap(uint96[6],uint32[6]) (runs: 256, μ: 12593553, ~: 12599516)\n[PASS] testFuzz_tip_conservesEveryWei(uint256,uint8,uint256) (runs: 256, μ: 463795, ~: 445694)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 399.02ms (868.58ms CPU time)\n\nRan 5 tests for test/questions/QuestionsLaunchAudit.t.sol:QuestionsLaunchAuditTest\n[PASS] testFuzz_audit_silenceWaitsThroughTheRequestedValidity(uint32) (runs: 256, μ: 1924878, ~: 1924944)\n[PASS] test_audit_observerCannotDiscardAStillValidPanelAnswerAtTwelveHours() (gas: 1697141)\n[PASS] test_audit_publicAttestationCannotTakeTheOpenersTip() (gas: 1823442)\n[PASS] test_audit_rotatedSignerIsRejectedAndUnspentMeterRemainsRedeemable() (gas: 1622238)\n[PASS] test_audit_signerCodeWithoutERC1271RejectsPlainSignatures() (gas: 1717238)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 977.86ms (978.76ms CPU time)\n\nRan 21 tests for test/questions/QuestionsMeter.t.sol:QuestionsMeterTest\n[PASS] testFuzz_fund_neverCostsAFunderMoreThanAWei(uint96,uint96,uint8) (runs: 256, μ: 1579140, ~: 826773)\n[PASS] test_defund_isNeverBlockedByTheFeedsState() (gas: 1145945)\n[PASS] test_defund_moreThanHeld_takesEverything() (gas: 354184)\n[PASS] test_defund_returnsTheSharesPartOfTheMeter() (gas: 292282)\n[PASS] test_defund_roundsDownAndLeavesTheDustOnTheMeter() (gas: 1858088)\n[PASS] test_defund_withNoShares_reverts() (gas: 264466)\n[PASS] test_fundFor_addsToAnExistingPositionAtTheMetersWorth() (gas: 1215060)\n[PASS] test_fundFor_afterTheMeterWasSpentToZero() (gas: 1811625)\n[PASS] test_fundFor_oneself_isPlainFunding() (gas: 185104)\n[PASS] test_fundFor_paysFromTheCallerAndCreditsTheBeneficiary() (gas: 357158)\n[PASS] test_fundFor_refusesWhatFundRefuses_andAZeroBeneficiary() (gas: 132299)\n[PASS] test_fund_afterSpending_mintsAtTheMetersCurrentWorth() (gas: 2401443)\n[PASS] test_fund_creditsWhatActuallyArrived() (gas: 7196018)\n[PASS] test_fund_firstFunderCannotRoundALaterFunderOut() (gas: 339220)\n[PASS] test_fund_firstFunderGetsOneSharePerWei() (gas: 215794)\n[PASS] test_fund_refusesAMeterBeyondItsWidth() (gas: 272490)\n[PASS] test_fund_refusesZeroAndUnknownFeeds() (gas: 66175)\n[PASS] test_fund_revertsWithoutAllowanceOrBalance() (gas: 140691)\n[PASS] test_rescale_aVeryOldStakeReadsAsZero() (gas: 15363969)\n[PASS] test_rescale_keepsEveryonesPartAndNeverOverflows() (gas: 34406833)\n[PASS] test_spentToZero_oldSharesAreRetired() (gas: 2012741)\nSuite result: ok. 21 passed; 0 failed; 0 skipped; finished in 982.67ms (1.02s CPU time)\n\nRan 11 tests for test/payroll/integration/LaunchA.t.sol:LaunchAIntegrationTest\n[PASS] test_integration_aCatchUpCountIsKeptAndTheDaysAfterPairAgain() (gas: 6512395)\n[PASS] test_integration_aRealWindowIsAlwaysOverWhenItsAnswerIsPrinted() (gas: 3553054)\n[PASS] test_integration_aShortBudgetGoesToTheTwoDailyFeeds() (gas: 2674939)\n[PASS] test_integration_anUnknownHouseFeedIsSkipped() (gas: 1256958)\n[PASS] test_integration_crownAcceptsARealAttestedList() (gas: 2752599)\n[PASS] test_integration_fundFeedsTopsUpRealMeters() (gas: 2203329)\n[PASS] test_integration_launchAConstructsOnAnEmptyChainInsideTheGasGate() (gas: 9883347)\nLogs:\n  initcode of launch A, bytes: 46332\n  launch A at 240 gas a byte: 11119680\n  creation alone, measured here: 9689381\n\n[PASS] test_integration_printFollowsRealRounds() (gas: 4872999)\n[PASS] test_integration_theHiresCountSurvivesOneLateRequest() (gas: 16993485)\n[PASS] test_integration_theReportIsCompleteWithoutTheEmployersFeed() (gas: 5780256)\n[PASS] test_integration_theStreakEndsAfterAMissedDay() (gas: 7080259)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 1.04s (35.36ms CPU time)\n\nRan 6 tests for test/launch/LaunchRunbook.t.sol:LaunchRunbookTest\n[PASS] test_proof_shellRecipeGivesTheBodyTheContractSends() (gas: 4800575)\n[PASS] test_proof_statedPriceAndActionAreTheFeeds() (gas: 1067614)\n[PASS] test_runbook_documentedCalldataCreatesTheManifestFeeds() (gas: 9437342)\n[PASS] test_runbook_documentedCalldataIsWhatTheFixturesGive() (gas: 2377829)\n[PASS] test_runbook_firstDayGoesThroughInTheOrderWritten() (gas: 14985672)\n[PASS] test_runbook_printsTheCalldata() (gas: 234410)\nLogs:\n  feed: payrolls\n  feedId: 0x4bf83605cd50e9658472bde9be314bb3848a563301fa793328bef17ad2a07b61\n  calldata bytes: 1572\n  createFeed calldata: 0x8320d106000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000005a06f7261636c652e72657175657374406f7261636c652d310000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000151800000000000000000000000000000000000000000000000000000000000001b580000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000001bc16d674ec8000000000000000000000000000000000000000000000000000000b1a2bc2ec500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b77b22616e7377657254797065223a2275696e74323536222c22636861696e4964223a312c22646566696e6974696f6e73223a7b22726563697065223a227b5c226b696e645c223a5c226c6f672d73756d5c222c5c22616464726573735c223a5c223078643334613939626330663637616531626264363363363630653664306230646430336532363362375c222c5c226576656e745c223a5c226576656e74205472616e73666572286164647265737320696e64657865642066726f6d2c206164647265737320696e646578656420746f2c2075696e743235362076616c7565295c222c5c2273756d4172675c223a5c2276616c75655c222c5c226162735c223a66616c73652c5c2266696c7465725c223a7b5c22746f5c223a5c223078346530666135376264653732363037393335363533376532663334643637316539663431616462635c227d7d202d207772697465207265636970652065786163746c7920746869732c206576656e74207465787420696e636c756465642e227d2c227175657374696f6e223a2257686174206973207468652073756d206f66207468652076616c756520617267756d656e74206f66206576657279205472616e73666572286164647265737320696e64657865642066726f6d2c206164647265737320696e646578656420746f2c2075696e743235362076616c756529206576656e7420656d69747465642062792074686520746f6b656e20636f6e7472616374203078643334613939626330663637616531626264363363363630653664306230646430336532363362372077686f736520746f20617267756d656e742069732030783465306661353762646537323630373933353635333765326633346436373165396634316164626320696e207468652077696e646f773f222c2276223a312c2277696e646f77223a7b2266726f6d426c6f636b223a00000000000000000000000000000000000000000000000000000000000000000000000000000000562c2265766964656e6365223a22636861696e222c2270616e656c53697a65223a372c2271756f72756d223a352c22746f6c6572616e6365427073223a302c2276616c6964466f725365636f6e6473223a38363430307d00000000000000000000\n  feed: hires\n  feedId: 0xfde22d9c1b97b7ce9763dff388a66366f9012d4ba7c57c3239377a75532bee4d\n  calldata bytes: 1508\n  createFeed calldata: 0x8320d106000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000005606f7261636c652e72657175657374406f7261636c652d310000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000151800000000000000000000000000000000000000000000000000000000000001b580000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000001bc16d674ec8000000000000000000000000000000000000000000000000000000b1a2bc2ec5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026f7b22616e7377657254797065223a2275696e74323536222c22636861696e4964223a312c22646566696e6974696f6e73223a7b22726563697065223a227b5c226b696e645c223a5c226c6f672d636f756e745c222c5c22616464726573735c223a5c223078643334613939626330663637616531626264363363363630653664306230646430336532363362375c222c5c226576656e745c223a5c226576656e74205472616e73666572286164647265737320696e64657865642066726f6d2c206164647265737320696e646578656420746f2c2075696e743235362076616c7565295c222c5c2266696c7465725c223a7b5c22746f5c223a5c223078346530666135376264653732363037393335363533376532663334643637316539663431616462635c227d7d202d207772697465207265636970652065786163746c7920746869732c206576656e74207465787420696e636c756465642e227d2c227175657374696f6e223a22486f77206d616e79205472616e73666572286164647265737320696e64657865642066726f6d2c206164647265737320696e646578656420746f2c2075696e743235362076616c756529206576656e7473206469642074686520746f6b656e20636f6e74726163742030786433346139396263306636376165316262643633633636306536643062306464303365323633623720656d69742077686f736520746f20617267756d656e742069732030783465306661353762646537323630373933353635333765326633346436373165396634316164626320696e207468652077696e646f773f222c2276223a312c2277696e646f77223a7b2266726f6d426c6f636b223a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000562c2265766964656e6365223a22636861696e222c2270616e656c53697a65223a372c2271756f72756d223a352c22746f6c6572616e6365427073223a302c2276616c6964466f725365636f6e6473223a38363430307d00000000000000000000\n  feed: employers\n  feedId: 0x22ad8df0e0af07aa59e29aa7f5540e0022fbfda0651ccae3eccb968553a14835\n  calldata bytes: 1924\n  createFeed calldata: 0x8320d106000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000007206f7261636c652e72657175657374406f7261636c652d31000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000015180000000000000000000000000000000000000000000000000000000000000bf68000000000000000000000000000000000000000000000000000000000000c4e0000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000001bc16d674ec8000000000000000000000000000000000000000000000000000000b1a2bc2ec500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004367b22616e7377657254797065223a22616464726573735b5d222c22636861696e4964223a312c22646566696e6974696f6e73223a7b226d6574686f64223a225265616420746865205472616e73666572286164647265737320696e64657865642066726f6d2c206164647265737320696e646578656420746f2c2075696e743235362076616c756529206c6f677320656d697474656420627920307864333461393962633066363761653162626436336336363065366430623064643033653236336237206f6e20457468657265756d206d61696e6e657420696e2074686520626c6f636b2077696e646f772c206b6565702074686f73652077686f736520746f206973203078346530666135376264653732363037393335363533376532663334643637316539663431616462632c206164642075702076616c7565207065722066726f6d20616464726573732c206f72646572206279207468617420746f74616c2066726f6d206c61726765737420746f20736d616c6c6573742077697468207469657320627920617363656e64696e6720616464726573732c20616e6420616e73776572207468652066697273742033206164647265737365732e222c22736f75726365223a22457468657265756d206d61696e6e6574206576656e74206c6f6773206f6e6c792c20726561642066726f6d20616e792066756c6c206e6f64652e204e6f2077656273697465206f7220696e6465782e227d2c2265766964656e6365223a2270616e656c222c2268656164223a332c227175657374696f6e223a225768696368207468726565206164647265737365732073656e7420746865206d6f737420494d442028746f6b656e20636f6e7472616374203078643334613939626330663637616531626264363363363630653664306230646430336532363362372920746f20307834653066613537626465373236303739333536353337653266333464363731653966343161646263206f6e20457468657265756d206d61696e6e657420696e207468652077696e646f773f2052616e6b2073656e64657273206279207468652073756d206f662076616c7565206f766572205472616e73666572286164647265737320696e64657865642066726f6d2c206164647265737320696e646578656420746f2c2075696e743235362076616c756529206576656e7473206f66207468617420636f6e74726163742077686f736520746f20617267756d656e74206973203078346530666135376264653732363037393335363533376532663334643637316539663431616462632c2067726f757065642062792066726f6d3b20616e737765722065786163746c792074686520746f702033206164647265737365732c206c6172676573742066697273742c207469657320627920617363656e64696e6720616464726573732e222c2276223a312c2277696e646f77223a7b2266726f6d426c6f636b223a0000000000000000000000000000000000000000000000000000000000000000000000000000000000322c2270616e656c53697a65223a372c2271756f72756d223a352c2276616c6964466f725365636f6e6473223a38363430307d0000000000000000000000000000\n\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 1.04s (22.79ms CPU time)\n\nRan 6 tests for test/payroll/JobsReportFuzz.t.sol:JobsReportFuzzTest\n[PASS] testFuzz_counts_pairExactlyByTheMostlySharedRule(uint256) (runs: 256, μ: 2327489, ~: 2362717)\n[PASS] testFuzz_crown_anyAttestedBytesEndCleanly(bytes) (runs: 256, μ: 180163, ~: 179892)\n[PASS] testFuzz_crown_anyListShapedBytesEndCleanly(uint256,uint256,uint256[5],bool,bool) (runs: 256, μ: 204579, ~: 182719)\n[PASS] testFuzz_crown_onlyTheAttestedBytesAreAccepted(address[],bytes) (runs: 256, μ: 202546, ~: 201518)\n[PASS] testFuzz_crown_topThreeAreTheFirstThreeOfTheList(address[]) (runs: 256, μ: 388881, ~: 387559)\n[PASS] testFuzz_print_matchesTheRules(uint256) (runs: 256, μ: 1082988, ~: 1084667)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 1.04s (483.12ms CPU time)\n\nRan 32 tests for test/questions/QuestionsRequest.t.sol:QuestionsRequestTest\n[PASS] testFuzz_gate_everyComparison(uint256,uint256,uint8) (runs: 256, μ: 826504, ~: 827220)\n[PASS] test_blocked_backsOffAfterFailedRounds() (gas: 5596499)\n[PASS] test_blocked_secondRequestInOneTransaction() (gas: 2804623)\n[PASS] test_blocked_secondRequestInOneTransaction_unmodifiedContract() (gas: 2946044)\n[PASS] test_blocked_untilTheCadenceHasElapsed() (gas: 1789376)\n[PASS] test_blocked_whenTheIntakeDoesNotSellTheAction() (gas: 357594)\n[PASS] test_blocked_whenTheMeterCannotPay() (gas: 1295415)\n[PASS] test_blocked_whenThePriceCannotBeRead() (gas: 6862979)\n[PASS] test_blocked_whenThePriceIsAboveTheFeedsCap() (gas: 1253277)\n[PASS] test_blocked_whenThePriceIsAbsurd_theViewsStillAnswer() (gas: 398452)\n[PASS] test_blocked_whileARoundIsPending() (gas: 1008584)\n[PASS] test_gate_longReply_readsOneWord() (gas: 1798215)\n[PASS] test_gate_opensWhenTheLineIsCrossed() (gas: 2633331)\n[PASS] test_gate_passesItsStoredArguments() (gas: 1595002)\n[PASS] test_gate_thatMisbehaves_isClosed() (gas: 2342319)\n[PASS] test_nextBody_isExactlyWhatRequestSends() (gas: 1038985)\n[PASS] test_request_afterTheCallersOwnIntakeRequest_isNeverServedAndEarnsTheCallerNothing() (gas: 2453247)\n[PASS] test_request_anUnservedRoundCanBeAnsweredThroughSubmit() (gas: 1849195)\n[PASS] test_request_anyoneMayCall_andEarnsTheTipWhenTheRoundIsAnswered() (gas: 1362141)\n[PASS] test_request_buysOneAnswerFromTheMeter() (gas: 1142216)\n[PASS] test_request_cannotBeReentered() (gas: 10345713)\n[PASS] test_request_paysTheLivePrice() (gas: 991381)\n[PASS] test_request_recordsTheClosingBlockHash() (gas: 2651826)\n[PASS] test_request_refusesAReusedRequestId() (gas: 7666567)\n[PASS] test_request_revertsRatherThanLeaveTheMetersShort() (gas: 7947834)\n[PASS] test_request_revertsWhenTheIntakeTakesLessThanThePrice() (gas: 7618250)\n[PASS] test_request_withNoTip_paysOnlyTheIntake() (gas: 1374555)\n[PASS] test_windows_contiguous_afterAFailedRound_startAtTheSameBlock() (gas: 2114437)\n[PASS] test_windows_contiguous_areCutAtTheMaximumAndCatchUp() (gas: 2492243)\n[PASS] test_windows_contiguous_tileExactly() (gas: 2527901)\n[PASS] test_windows_onAYoungChain_startAtBlockZeroOrWait() (gas: 1073334)\n[PASS] test_windows_rolling_alwaysTheNewestBlocks() (gas: 2343667)\nSuite result: ok. 32 passed; 0 failed; 0 skipped; finished in 995.47ms (85.11ms CPU time)\n\nRan 9 tests for test/launch/LaunchManifest.t.sol:LaunchManifestTest\n[PASS] test_bytecodeWalk_findsWhatItLooksForAndSkipsPushData() (gas: 423263)\n[PASS] test_launch_constructorsMakeNoCallAndNoCodeCheck() (gas: 13865853)\n[PASS] test_launch_deploysInManifestOrderOnAnEmptyChain() (gas: 11091393)\n[PASS] test_launch_fitsOurSizeAndGasGates() (gas: 10661617)\nLogs:\n  Questions: runtime bytes: 22233\n  Questions: initcode bytes with arguments: 23738\n  Questions: creation gas: 4935805\n  JobsReport: runtime bytes: 9320\n  JobsReport: initcode bytes with arguments: 9746\n  JobsReport: creation gas: 2104841\n  Payroll: runtime bytes: 11846\n  Payroll: initcode bytes with arguments: 12848\n  Payroll: creation gas: 2650102\n  launch A: initcode bytes in all: 46332\n  launch A: gas at 240 a byte: 11119680\n  launch A: creation gas measured here: 9690748\n\n[PASS] test_launch_runtimeBytecodeHasNoForbiddenOpcode() (gas: 28291343)\n[PASS] test_launch_stateChangingFunctionsAreExactlyTheDocumentedOnes() (gas: 20759152)\n[PASS] test_manifest_everyArgumentIsWhatTheCodeExpects() (gas: 13483445)\n[PASS] test_manifest_feedIdsAreRecomputedFromTheFixtures() (gas: 4346548)\n[PASS] test_manifest_namesTheThreeContractsInOrder() (gas: 1546144)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 1.04s (427.51ms CPU time)\n\nRan 40 tests for test/payroll/PayrollTips.t.sol:PayrollTipsTest\n[PASS] testFuzz_sweepTip_everyTipKeepsItsOwnWait(uint32[6],uint64[6]) (runs: 256, μ: 898009, ~: 886039)\n[PASS] testFuzz_sweepTip_lowGasNeverMakesAnOwnedSeatLookOwnerless(uint256) (runs: 256, μ: 10990155, ~: 12469184)\n[PASS] testFuzz_sweepTip_lowGasNeverSweepsABoundAgent(uint256) (runs: 256, μ: 301684, ~: 316868)\n[PASS] test_adapterRead_anAdapterBeyondItsAllowanceIsNotHeard() (gas: 203651)\n[PASS] test_adapterRead_anAdapterWithinItsAllowanceIsHeard() (gas: 355503)\n[PASS] test_adapterRead_reportsTooLittleGas() (gas: 179013)\n[PASS] test_claimTip_nothingOwedReturnsZeroWithoutAskingTheAdapter() (gas: 108272)\n[PASS] test_claimTip_paysTheOwnerOfTheBoundSeat() (gas: 440040)\n[PASS] test_claimTip_paysTipsOfEveryAge() (gas: 538531)\n[PASS] test_claimTip_paysWhoeverOwnsTheSeatNow() (gas: 281786)\n[PASS] test_claimTip_revertsForAnUnboundAgent() (gas: 167013)\n[PASS] test_claimTip_revertsWhenBoundToAnotherToken() (gas: 233637)\n[PASS] test_claimTip_revertsWhenTheAdapterReverts() (gas: 333018)\n[PASS] test_claimTip_revertsWhenTheSeatHasNoOwner() (gas: 347811)\n[PASS] test_claimTip_revertsWhenTheTokenIdIsNotASeat() (gas: 235271)\n[PASS] test_claimTip_treatsMalformedAnswersAsNotClaimable() (gas: 1052354)\n[PASS] test_claimTip_whenTheAdapterHasNoCode() (gas: 207230)\n[PASS] test_sweepTip_aLaterTipDoesNotDelayAnEarlierOne() (gas: 352585)\n[PASS] test_sweepTip_aSeatThatHasItsOwnerBackKeepsTheTip() (gas: 352522)\n[PASS] test_sweepTip_aTipWaitsBetween180And360Days() (gas: 399663)\n[PASS] test_sweepTip_afterAClaimANewTipWaitsItsOwnTime() (gas: 466911)\n[PASS] test_sweepTip_agentBoundInTimeKeepsItsTip() (gas: 375487)\n[PASS] test_sweepTip_movesAnUnboundAgentsTipsToTheSeatPoolOnceTheyHaveWaited() (gas: 448020)\n[PASS] test_sweepTip_neverTakesATipThatCanBeClaimed() (gas: 280940)\n[PASS] test_sweepTip_nothingOwedReturnsZero() (gas: 37204)\n[PASS] test_sweepTip_oneWeiTipsCannotHoldOlderTipsOutOfTheSeatPool() (gas: 862499)\n[PASS] test_sweepTip_reportsTooLittleGasAfterAFailedOwnerRead() (gas: 5241802)\n[PASS] test_sweepTip_takesATipBoundToASeatNobodyOwns() (gas: 486188)\n[PASS] test_sweepTip_takesATipBoundToAnotherToken() (gas: 401019)\n[PASS] test_sweepTip_takesOnlyWhatHasWaited() (gas: 563634)\n[PASS] test_tip_acceptsAnyIds() (gas: 230335)\n[PASS] test_tip_addsUpAcrossPeriods() (gas: 502174)\n[PASS] test_tip_duplicateIdsAreCreditedOncePerMention() (gas: 283107)\n[PASS] test_tip_emptyListSendsEverythingToTheSeatPool() (gas: 339394)\n[PASS] test_tip_onlyTheFirstSixteenIdsShare() (gas: 636368)\n[PASS] test_tip_remainderJoinsTheSeatPool() (gas: 403523)\n[PASS] test_tip_revertsOnlyWhenTheTransferDoes() (gas: 45044)\n[PASS] test_tip_splitsEquallyAndIsNotBookedAsRevenue() (gas: 374131)\n[PASS] test_tip_tooSmallToSplitGoesToTheSeatPool() (gas: 311592)\n[PASS] test_tip_zeroDoesNothing() (gas: 60881)\nSuite result: ok. 40 passed; 0 failed; 0 skipped; finished in 1.04s (1.11s CPU time)\n\nRan 1 test for test/payroll/invariant/PayrollInvariant.t.sol:PayrollInvariantTest\n[PASS]\nPayrollInvariantTest invariants:\n[PASS] invariant_everyPayoutReachedItsPayee\n[PASS] invariant_noCallMisbehaved\n[PASS] invariant_noSeatTakesMoreThanItsShare\n[PASS] invariant_theBalanceCoversEverythingOwed\n[PASS] invariant_theSplitAddsUp\n PayrollInvariantTest invariants (runs: 64, calls: 3072, reverts: 129)\n\n╭----------------+-----------------------+-------+---------+----------╮\n| Contract       | Selector              | Calls | Reverts | Discards |\n+=====================================================================+\n| PayrollHandler | bindAgent             | 133   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | book                  | 167   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | breakSeat             | 158   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | changeQuestions       | 157   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | claimSeat             | 168   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | claimSeats            | 149   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | claimTip              | 151   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | defundMeterAsStranger | 141   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | drip                  | 163   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | emptyVault            | 157   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | fundFeeds             | 156   | 129     | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | fundMeterAsStranger   | 150   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | moveSeat              | 153   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | pay                   | 156   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | refillVault           | 132   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | spendMeter            | 138   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | sweepTip              | 185   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | tip                   | 144   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | transferPlainly       | 164   | 0       | 0        |\n|----------------+-----------------------+-------+---------+----------|\n| PayrollHandler | wait                  | 150   | 0       | 0        |\n╰----------------+-----------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.13s (1.13s CPU time)\n\nRan 2 tests for test/questions/QuestionsInvariant.t.sol:QuestionsInvariantTest\n[PASS]\nQuestionsInvariantTest invariants:\n[PASS] invariant_Q1_onePendingRoundPerFeed\n[PASS] invariant_Q2_eachAttestationAnswersAFeedOnce\n[PASS] invariant_Q3_contiguousWindowsTile\n[PASS] invariant_everyHolderCanAlwaysDefund\n[PASS] invariant_metersAddUpToTheContractsBalance\n[PASS] invariant_sharesNeverClaimMoreThanTheMeter\n[PASS] invariant_tipsAreOwedForAnswersOnly\n QuestionsInvariantTest invariants (runs: 64, calls: 3072, reverts: 0)\n\n╭------------------+-----------+-------+---------+----------╮\n| Contract         | Selector  | Calls | Reverts | Discards |\n+===========================================================+\n| QuestionsHandler | abandon   | 204   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | answer    | 235   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | collect   | 202   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | defund    | 201   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | donate    | 221   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | fund      | 230   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | fundFor   | 211   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | moveGate  | 202   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | movePrice | 250   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | pass      | 217   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | refuse    | 224   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | replay    | 242   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | request   | 213   | 0       | 0        |\n|------------------+-----------+-------+---------+----------|\n| QuestionsHandler | twin      | 220   | 0       | 0        |\n╰------------------+-----------+-------+---------+----------╯\n\n[PASS] test_handlerReachesEveryState() (gas: 50204604)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 5.29s (5.32s CPU time)\n\nRan 48 test suites in 5.35s (16.56s CPU time): 502 tests passed, 0 failed, 0 skipped (502 total tests)\n","passed":true},{"durationMs":120,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"JobsReport.crown(uint64,bytes)\",\"JobsReport.print()\",\"Payroll.book()\",\"Payroll.claimSeat(uint256)\",\"Payroll.claimSeats(uint256[])\",\"Payroll.claimTip(uint256)\",\"Payroll.drip()\",\"Payroll.fundFeeds()\",\"Payroll.pay(uint256,bytes32)\",\"Payroll.sweepTip(uint256)\",\"Payroll.tip(uint256[],uint256)\",\"Questions.abandon(bytes32)\",\"Questions.collectTips()\",\"Questions.createFeed((bytes32,uint64,uint8,uint16,uint16,uint16,uint32,uint32,uint32,uint16,bool,bool,uint96,uint96,uint8,address,uint256,bytes),bytes,bytes)\",\"Questions.defund(bytes32,uint256)\",\"Questions.fund(bytes32,uint256)\",\"Questions.fundFor(bytes32,uint256,address)\",\"Questions.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"Questions.request(bytes32)\",\"Questions.reveal(bytes32,uint64,bytes)\",\"Questions.submit(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\"],\"files\":{\".gitignore\":12,\"ADAPTATION.md\":163,\"LICENSE\":21,\"README.md\":269,\"docs/AUDITS.md\":298,\"docs/DEVIATIONS.md\":251,\"docs/LAUNCH.md\":813,\"docs/THREATS.md\":553,\"foundry.toml\":43,\"launch.json\":37,\"remappings.txt\":2,\"src/interfaces/IPayroll.sol\":41,\"src/interfaces/IQuestions.sol\":57,\"src/interfaces/external/IIntake.sol\":55,\"src/interfaces/external/ISeatAdapter.sol\":21,\"src/interfaces/external/Mainnet.sol\":40,\"src/payroll/JobsReport.sol\":680,\"src/payroll/Payroll.sol\":1243,\"src/questions/OracleAttestation.sol\":221,\"src/questions/QuestionBody.sol\":138,\"src/questions/Questions.sol\":1390,\"test/fixtures/payroll/attested-address-list.json\":15,\"test/fixtures/payroll/mainnet-seat-binding.json\":16,\"test/fixtures/questions/feeds/employers.json\":92,\"test/fixtures/questions/feeds/hires.json\":76,\"test/fixtures/questions/feeds/payrolls.json\":75,\"test/fixtures/questions/intake/requested.json\":53,\"test/fixtures/questions/proofs/employers-first-attempt.intake.json\":1,\"test/fixtures/questions/proofs/employers-first-attempt.oracle.json\":1,\"test/fixtures/questions/proofs/employers.attestation.json\":1,\"test/fixtures/questions/proofs/employers.intake.json\":1,\"test/fixtures/questions/proofs/employers.oracle.json\":1,\"test/fixtures/questions/proofs/hires.attestation.json\":1,\"test/fixtures/questions/proofs/hires.intake.json\":1,\"test/fixtures/questions/proofs/hires.oracle.json\":1,\"test/fixtures/questions/proofs/index.json\":190,\"test/fixtures/questions/proofs/payrolls.attestation.json\":1,\"test/fixtures/questions/proofs/payrolls.intake.json\":1,\"test/fixtures/questions/proofs/payrolls.oracle.json\":1,\"test/fixtures/questions/requests/01604a11-d04f-4960-9b1d-a3811a000048.json\":1,\"test/fixtures/questions/requests/03f89e74-3db8-4c10-8fa8-d3424c9a18d4.json\":1,\"test/fixtures/questions/requests/05ce467c-1900-4a32-87ec-70d499f98536.json\":1,\"test/fixtures/questions/requests/0e21ab1a-ca72-4618-b814-d1909aeb5437.json\":1,\"test/fixtures/questions/requests/13766f38-ef02-45f1-b168-7107d657ee44.json\":1,\"test/fixtures/questions/requests/18b11d16-705c-494e-b59a-22c6ecdb4cd1.json\":1,\"test/fixtures/questions/requests/286b7948-ba7c-41ae-9cc9-7ba15f497876.json\":1,\"test/fixtures/questions/requests/383a398f-7fc1-4a43-8c88-37573e64c79d.json\":1,\"test/fixtures/questions/requests/4886cfab-425d-4130-bc58-a764627f3b26.json\":1,\"test/fixtures/questions/requests/54d11aa3-3603-45a6-9e7d-abf63e359c29.json\":1,\"test/fixtures/questions/requests/709556f3-b5c8-4034-a780-9e3a34eed0ee.json\":1,\"test/fixtures/questions/requests/8f76e26f-125d-4b9f-9fa1-7671699256d9.json\":1,\"test/fixtures/questions/requests/954eba86-a232-4fed-b3ea-e629ebc1e649.json\":1,\"test/fixtures/questions/requests/9b4aa012-184e-4b0b-8c6f-fab11f0cb9e6.json\":1,\"test/fixtures/questions/requests/a4d33e90-1c2c-49bd-a4aa-2d8e3f6570f3.json\":1,\"test/fixtures/questions/requests/b8c51269-16c2-405f-91f9-50722fdedda9.json\":1,\"test/fixtures/questions/requests/c5e21f11-5172-4f9b-a506-9babcdfa47c2.json\":1,\"test/fixtures/questions/requests/c72be526-171a-41db-8444-bdde0205f87f.json\":1,\"test/fixtures/questions/requests/cd04b41d-3f6c-4fcd-a1c0-865a62fbd102.json\":1,\"test/fixtures/questions/requests/d5b04a1c-cefc-4177-98b8-b5908efec55e.json\":1,\"test/fixtures/questions/requests/dbcac6c2-6328-47a9-8e07-4c7b55f78e45.json\":1,\"test/fixtures/questions/requests/dcc0a889-47e2-4320-972e-6543c96eb98d.json\":1,\"test/fixtures/questions/requests/f9e472ad-8963-4c3f-9871-b14b4160a8af.json\":1,\"test/fixtures/questions/requests/index.json\":401,\"test/fixtures/questions/tools/build_conformance.py\":97,\"test/fixtures/questions/tools/build_house_feeds.py\":372,\"test/fixtures/questions/tools/build_request_fixtures.py\":74,\"test/fixtures/questions/tools/extract_reference.py\":32,\"test/fixtures/questions/tools/fetch_requests.py\":29,\"test/fixtures/questions/tools/qlib.py\":104,\"test/launch/LaunchKit.sol\":199,\"test/launch/LaunchManifest.t.sol\":340,\"test/launch/LaunchRunbook.t.sol\":311,\"test/launch/fork/LaunchRehearsal.fork.t.sol\":508,\"test/payroll/JobsReport.t.sol\":1093,\"test/payroll/JobsReportFuzz.t.sol\":258,\"test/payroll/JobsReportSetup.sol\":92,\"test/payroll/PayrollBooking.t.sol\":326,\"test/payroll/PayrollFeeds.t.sol\":747,\"test/payroll/PayrollFixture.t.sol\":121,\"test/payroll/PayrollFuzz.t.sol\":249,\"test/payroll/PayrollGas.t.sol\":253,\"test/payroll/PayrollLaunchAudit.t.sol\":111,\"test/payroll/PayrollScenario.t.sol\":97,\"test/payroll/PayrollSeats.t.sol\":293,\"test/payroll/PayrollSetup.sol\":176,\"test/payroll/PayrollStream.t.sol\":670,\"test/payroll/PayrollTips.t.sol\":650,\"test/payroll/audit/AuditReports.t.sol\":492,\"test/payroll/fork/LaunchAFork.t.sol\":268,\"test/payroll/fork/PayrollFork.t.sol\":320,\"test/payroll/integration/LaunchA.t.sol\":570,\"test/payroll/invariant/PayrollHandler.sol\":556,\"test/payroll/invariant/PayrollInvariant.t.sol\":185,\"test/payroll/mocks/MockSeats.sol\":132,\"test/payroll/mocks/MockTokens.sol\":212,\"test/payroll/mocks/QuestionsRig.sol\":106,\"test/questions/HouseFeedProofs.t.sol\":487,\"test/questions/HouseFeeds.t.sol\":335,\"test/questions/OracleConsumerConformance.t.sol\":146,\"test/questions/QuestionBody.t.sol\":263,\"test/questions/QuestionHashFixtures.t.sol\":153,\"test/questions/QuestionsAbandon.t.sol\":404,\"test/questions/QuestionsAnswers.t.sol\":996,\"test/questions/QuestionsCallbackGas.t.sol\":174,\"test/questions/QuestionsFeeds.t.sol\":573,\"test/questions/QuestionsFixture.sol\":246,\"test/questions/QuestionsInvariant.t.sol\":790,\"test/questions/QuestionsLaunchAudit.t.sol\":144,\"test/questions/QuestionsMeter.t.sol\":503,\"test/questions/QuestionsRequest.t.sol\":879,\"test/questions/QuestionsSharedAnswers.t.sol\":239,\"test/questions/QuestionsTips.t.sol\":560,\"test/questions/RealAttestations.t.sol\":229,\"test/questions/fork/IIntakeV2.sol\":29,\"test/questions/fork/QuestionsIntake.fork.t.sol\":418,\"test/questions/lib/CanonicalQuestion.sol\":106,\"test/questions/mocks/IntakeDelivery.sol\":42,\"test/questions/mocks/MockIMD.sol\":31,\"test/questions/mocks/MockIntake.sol\":149,\"test/questions/mocks/Oddities.sol\":240,\"test/questions/mocks/QuestionsHarness.sol\":32,\"test/questions/mocks/QuestionsVectorHarness.sol\":42,\"test/scaffold/Interfaces.t.sol\":16},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"6ad4ce2c949a6d169f150f1c5673e8da5e64166d912c3a099bd4e44dc819aea4","verifiedTreeHash":"a068025a6b59a5124fe463933667c6183dbb4d5e","verifierVersion":"0.1.0+327e1e9f"}]}