{"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":"30df871d-0566-43e3-94a4-cf7e176334dc","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"7fc9d7fc42046d5523c07b8419c5715b4101dc5345033a0af476428c332ba1b1","dependsOn":["build_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":"7b7a7b857f3a90f8093d2ad4bd6485cf8b613ac71809663182e862e9111eef58","dependsOn":["build_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":"c1745ced526a04f8d7b4b8b86d612658c4cde230d7e3d257fd33882f476972ff","dependsOn":["build_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":"f3acbe11846abd0925c8982f60c2e929495ff464db27e78e419b555a133d3e4c","dependsOn":["build_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":"bfc05f4fc053fb9600cb2d1bf203cc696608761b0a204931519c18e3a4d099b1","dependsOn":["build_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":"b8a77071d5c97c9728864420af833de2e9e57d8f03ff85cccd0a7faa703ca312","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"6b8d2c2ebd3301cff2be8edb1e1cc6ba65c858c02fe7247be81722b969842265","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"6b8d2c2ebd3301cff2be8edb1e1cc6ba65c858c02fe7247be81722b969842265","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":"f49c11773b8faefe2842ace8c23c66783324c5bc5b77b108d6672987dfeb1267","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"f24b17c81e2f7e3782888601832951b220fea39f4a4a91591d35273c642f2d02","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"4c76766b00591dfe982fe85d3de589fdb2f810e5137c301155d1c5e36a1d3b23","skillId":"write-foundry-tests","tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"4c76766b00591dfe982fe85d3de589fdb2f810e5137c301155d1c5e36a1d3b23","skillId":"write-foundry-tests","state":"accepted"}],"objective":"A custom token: Keelpad (KEEL).\nToken name: Keelpad\nToken symbol: KEEL\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.","parentJobId":null,"planHash":"3eadfb62fdcfcdd8a0f0a06c4752ba2bf626d3530b57206d855a1be7835c615c","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"30df871d-0566-43e3-94a4-cf7e176334dc","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-1801-keelpad"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"52480","feedbackHash":"48bbb90297613a08a5fc60d648a0cb7e2464ec09124d505798aff68fe39b215a","nodeKey":"audit_economics","submissionHash":"7fc9d7fc42046d5523c07b8419c5715b4101dc5345033a0af476428c332ba1b1","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51442","feedbackHash":"cfb56c25f8c001c80ea725e7cb2a035976188cf3382c8ef2ba877781889bd6ee","nodeKey":"audit_flow","submissionHash":"7b7a7b857f3a90f8093d2ad4bd6485cf8b613ac71809663182e862e9111eef58","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52130","feedbackHash":"9875e25c25ce323766a29e7e21d152fb5c90a09f07802cb6f8a476d7361d64bb","nodeKey":"audit_judge","submissionHash":"c1745ced526a04f8d7b4b8b86d612658c4cde230d7e3d257fd33882f476972ff","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"50959","feedbackHash":"2afd8284ded91ae49579adb888d22c72d946a435590a989d956e453ac23f4438","nodeKey":"audit_math","submissionHash":"f3acbe11846abd0925c8982f60c2e929495ff464db27e78e419b555a133d3e4c","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51083","feedbackHash":"ac63e6ce7e64f131a1d5ae629b5422ba6efa963b2a81079e0058b6d6d7f6813c","nodeKey":"audit_permissions","submissionHash":"bfc05f4fc053fb9600cb2d1bf203cc696608761b0a204931519c18e3a4d099b1","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52375","feedbackHash":"062a90de2b62e8fd3ddb800c9635dfd91b4f10363a24903156ef308dcefc3948","nodeKey":"build_contract_project","submissionHash":"b8a77071d5c97c9728864420af833de2e9e57d8f03ff85cccd0a7faa703ca312","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51072","feedbackHash":"64a546094825451e7d03a24bcc41300e4be8a91b3c5b3fef16b6099be61bf0e4","nodeKey":"manifest","submissionHash":"f49c11773b8faefe2842ace8c23c66783324c5bc5b77b108d6672987dfeb1267","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"54144","feedbackHash":"03cf2d5284e856e20db75fb8e990ceb18d9ffe691d2740a640a7ee833bd9b6bd","nodeKey":"write_foundry_tests","submissionHash":"f24b17c81e2f7e3782888601832951b220fea39f4a4a91591d35273c642f2d02","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"a16871b72556ff357b169529b95b3681049fd51e1acea82ab555057951c038ad","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"2b9b0095482c54e6","findings":[],"hash":"7b7a7b857f3a90f8093d2ad4bd6485cf8b613ac71809663182e862e9111eef58","nodeId":"f478f4ce-c9b0-4e3a-82da-c57905bf3379","outcome":"completed","summary":"I found no defects in Keelpad (KEEL), and I've written an empty findings list with full coverage to `.imd-findings.json`.\n\n**What the code is:** `src/Keelpad.sol` is a plain OpenZeppelin v5.0.2 ERC20. Its constructor makes one `_mint(msg.sender, INITIAL_SUPPLY)` call, where `INITIAL_SUPPLY = 1_000_000_000 * 10 ** 18`, which is 1e27 and matches the brief. It changes no inherited behaviour, has no owner, mint, burn, pause or other privileged functions, and contains no assembly.\n\n**What I checked:**\n- **Library integrity:** the SHA-256 hashes of the vendored `ERC20.sol`, `Context.sol`, `IERC20.sol`, `IERC20Metadata.sol` and `draft-IERC6093.sol` all match `dependencies.lock.json`, so the inherited code is unmodified upstream.\n- **Execution trace:**\n  - `transfer` and `transferFrom` go through `_transfer` to `_update`. They revert on a zero sender or receiver and on insufficient balance or allowance, and otherwise move exactly the amount requested.\n  - An allowance of `type(uint256).max` is never decreased; any other allowance is checked and then decremented.\n  - `approve` rejects a zero spender and emits `Approval`.\n- **Launch flows (periphery):** there is no fee, burn or exemption logic. So the factory's transfer to the distributor, claims, the pool seed and swaps through the PoolManager all move exact amounts. Nothing calls back into other contracts, so there is no reentrancy surface.\n- **First principles:**\n  - The supply is fixed after the constructor and goes to the factory.\n  - No account can move or freeze another holder's balance.\n  - There is no DELEGATECALL, CALLCODE or SELFDESTRUCT.\n  - `decimals` is 18.\n- **Static-analysis lead:** aderyn's `large-numeric-literal` at `src/Keelpad.sol:10` is a style note. The value is correct, so I didn't report it.\n\nThe coverage record marks `approve`, `transfer` and `transferFrom` as `holds`, and adds rows for the fixed-supply invariant and the no-forbidden-opcodes invariant. The project's existing suite passes (31 tests). I didn't run the protected floor tests, because they need the launch environment variables the harness supplies.","treeHash":null,"usage":{"cachedInputTokens":222598,"inputTokens":12,"model":"claude-opus-5-5","outputTokens":2628,"runtime":"claude","turns":6,"wallClockMs":54547}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"b0b4e7bbc84f9d80","findings":[],"hash":"7fc9d7fc42046d5523c07b8419c5715b4101dc5345033a0af476428c332ba1b1","nodeId":"ca20b70b-10de-47cb-a295-e443bda45678","outcome":"completed","summary":"The review is complete. The findings file is written and the tree is otherwise unchanged.\n\n**Result: no defects found.** Keelpad is a 15-line contract that inherits OpenZeppelin ERC-20 v5.0.2 unchanged and mints exactly 10^27 units to its deployer once in the constructor. Nothing in the Economic Security, Invariant or Flow Gap checklists applies in a way that produces a failing input.\n\nWhat I verified:\n\n- **Vendored dependency is genuine.** All five OpenZeppelin files diff byte-identical against the upstream v5.0.2 release, and match the SHA-256 values in the lock file.\n- **Launch flows are exact.** A scratch test drove the real 10/80/10 split through a CREATE2 factory stand-in, a PoolManager-style sync/transfer/settle balance delta, distributor claims and a trader buy and sell. Every leg moved exactly the stated amount, including a fuzz over every pool share from 0 to 90 percent.\n- **Supply invariant holds.** Only the constructor touches total supply. The compiled ABI exposes just the standard ERC-20 surface, with no mint, burn, owner, pause, blacklist, upgrade or initializer. The runtime contains no DELEGATECALL, CALLCODE or SELFDESTRUCT.\n- **Failure paths revert atomically.** Overdraw, insufficient allowance and zero-address receiver all revert with allowances and balances untouched. The infinite allowance is preserved and finite allowances are consumed exactly.\n- **Static-analysis lead.** The aderyn large-numeric-literal line is the supply constant, which evaluates to exactly 10^27 as specified. Not a defect.\n\nThe repository's own 31 tests, including the fuzz and invariant suites, pass with the documented seed.\n\nCoverage record: all three entry points are marked `holds`, plus four invariant rows. The one thing I could not reach is the protected floor test against a real Uniswap v4 PoolManager, since v4-core is not vendored. Because the token makes no external calls and has no transfer hooks, a swap reduces to the plain transfer paths exercised here. I also noted that the README names Ethereum mainnet as the launch chain, which the later manifest step must reconcile with the job's actual chain.","treeHash":null,"usage":{"cachedInputTokens":544939,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":11125,"runtime":"claude","turns":22,"wallClockMs":187868}},{"artifacts":[],"attempt":1,"bundleHash":"e87c998134ef42795ec2cd4a7aee776251c54466f2da9648fde67f1d8f7de9c8","device":"0b9c1289a6def0a1","findings":[],"hash":"b8a77071d5c97c9728864420af833de2e9e57d8f03ff85cccd0a7faa703ca312","nodeId":"c298e575-91e9-491a-83f7-98f2bbbc2306","outcome":"completed","summary":"Implemented Keelpad (KEEL): 18 decimals, exactly 1,000,000,000 tokens minted once to the deployer.\n\n- `forge build`, `forge test`, and `forge fmt --check` pass.\n- All 31 tests pass with the specified seed, including fuzz and invariant tests.\n- Offline build and tests pass; dependencies are vendored.\n- Deployment assumptions and operational responsibilities are documented.\n\nThe external protected launch suite remains for the independent verifier.","treeHash":"b4ecb941ea4b6fec0c0d5ac8bcb44553d04e6ba6","usage":{"cachedInputTokens":443264,"inputTokens":56460,"model":"gpt-6-astra","outputTokens":15738,"runtime":"codex","turns":5,"wallClockMs":350155}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"dc7103e773ea194a","findings":[],"hash":"bfc05f4fc053fb9600cb2d1bf203cc696608761b0a204931519c18e3a4d099b1","nodeId":"15dec969-f8a9-4d28-a4f2-bae699f54ec8","outcome":"completed","summary":"The review is complete and found no defects in the assigned area. The findings file is written with an empty findings list and seven coverage rows, and the scratch test directory has been removed so the tree is unchanged apart from the required output file.\n\n**What was reviewed**\n\n- The token in `src/Keelpad.sol` is a 15-line contract: it inherits OpenZeppelin's ERC-20 and mints the whole supply once to the constructor's caller. The three listed entry points are the unmodified library functions.\n- The vendored OpenZeppelin files were diffed against the upstream v5.0.2 release and are byte-identical. They also match the SHA-256 values in the lock file.\n- The compiled ABI exposes no state-changing function beyond approve, transfer and transferFrom. There is no receive or fallback, and the runtime has no delegatecall, callcode or selfdestruct.\n\n**Access Control, Trust Gap and Asymmetry results**\n\n- The permission model is empty by design. There are no roles, modifiers, initializers or admin variants, so the guide's failure modes about inconsistent guards, escalation chains and unprotected initialization have nothing to attach to.\n- The deployer's only distinction is holding the initial balance. A scratch Foundry test confirmed the factory cannot pull from a holder without an allowance, and 14 common privileged selectors revert from both the deployer and a stranger.\n- The approve and transferFrom pair was traced for sentinel asymmetries. A zero sender cannot mint, a zero recipient cannot burn and the allowance is restored on revert, and a zero spender is rejected.\n- Every sender class runs the identical transfer path, so the launch flows to the distributor, claimants and the pool manager arrive exactly. The scratch harness deployed via CREATE2 from a factory contract and confirmed the supply is credited to the factory rather than the transaction origin.\n\n**Not reached**\n\nThe real Uniswap v4 seed and swap harness could not be run because v4-core is not vendored in this repository. Only the token-side transfer semantics were verified, which is all the token contributes to that flow. The aderyn large-numeric-literal note on line 10 is stylistic: the expression evaluates at compile time to exactly 1e27, as the existing tests assert.","treeHash":null,"usage":{"cachedInputTokens":758828,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":11434,"runtime":"claude","turns":25,"wallClockMs":212796}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"1c29c7c6e4cf57eb","findings":[],"hash":"c1745ced526a04f8d7b4b8b86d612658c4cde230d7e3d257fd33882f476972ff","nodeId":"ee59d86e-165b-410c-9d81-595548309180","outcome":"completed","summary":"I found no defects in the Keelpad (KEEL) token, so `.imd-findings.json` has an empty findings list and a coverage row for each entry point.\n\n**Specialist findings:** all four specialists and the test writer reported nothing, so there was nothing to reproduce or merge.\n\n**What the code is:** `src/Keelpad.sol` is a plain OpenZeppelin v5.0.0 `ERC20` with nothing changed. Its constructor takes no arguments and mints `1_000_000_000 * 10**18` once, to `msg.sender`. There is no other way to mint or burn, no owner or pause, and no fee or burn on transfer. That means the factory, distributor and pool flows each move exactly what they say.\n\n**Coverage (all `holds`):**\n- `approve(address,uint256)`: rejects a zero owner or spender, sets the allowance and emits `Approval`.\n- `transfer(address,uint256)`: rejects zero addresses, reverts if the balance is too low, and moves the exact amount.\n- `transferFrom(address,address,uint256)`: reverts if the allowance is too low, leaves an unlimited (max) allowance unchanged and reduces any other, then transfers like `transfer`.\n- Fixed supply: `launch.json` matches the code. It has a `totalSupply` of `1000000000000000000000000000`, `decimals` 18, empty `constructorArgs` for the no-argument constructor, a valid contract name and a lowercase `pairedCurrency`.\n- Deployability: the contract is 2,636 bytes of creation code and 1,752 bytes deployed, far under the limits. Its constructor needs no arguments and no particular address bits.\n\n**Checks:** the project's own 48 tests pass under `forge test`. The one static-analysis lead (aderyn's \"large numeric literal\" at line 10) is the supply constant itself and isn't a defect. I didn't add a finding for the standard ERC-20 approve front-running race, because it's ordinary behaviour, not something wrong in this code. I didn't run the protected tests, because they import harness files that aren't in this tree.\n\n**Stray files:** `git status` shows untracked dotfiles in the repository root that I didn't create: `.bashrc`, `.profile`, `.zshrc`, `.gitconfig`, `.mcp.json`, `.claude/`, `.vscode`, `.idea` and others. I left them alone. Remove them before anything is packaged from this tree, since a submission that touches configuration files is rejected.","treeHash":null,"usage":{"cachedInputTokens":229317,"inputTokens":12,"model":"claude-opus-5-5","outputTokens":2828,"runtime":"claude","turns":6,"wallClockMs":85503}},{"artifacts":[],"attempt":1,"bundleHash":"20c005d135522ccff202542c48b65b7db78030dc0534a53b0b7b926bddaa2018","device":"9a9cbce82297045e","findings":[],"hash":"f24b17c81e2f7e3782888601832951b220fea39f4a4a91591d35273c642f2d02","nodeId":"bf54ce44-6420-425e-ab57-60d5e92da477","outcome":"completed","summary":"Implemented only under `test/`: 17 new edge/fuzz tests and stronger balance, allowance, and supply invariants.\n\nValidation passed offline:\n- `forge build`\n- Full `forge test` with the required seed: 48 passed, 0 failed.\n- 32,768 invariant calls, no unexpected reverts.\n\nNo implementation defects found.","treeHash":"d5a40d1c85653a1940bd1dd3fd7174d3c583ffdf","usage":{"cachedInputTokens":888192,"inputTokens":69300,"model":"gpt-6-astra","outputTokens":12369,"runtime":"codex","turns":6,"wallClockMs":316208}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"468e82a89b9bfe18","findings":[],"hash":"f3acbe11846abd0925c8982f60c2e929495ff464db27e78e419b555a133d3e4c","nodeId":"568c6c50-0fbd-4b75-be53-e8dae4bc999f","outcome":"completed","summary":"The review is complete. No defects were found in the math, boundary or numerical-gap area, and the findings file records that with full coverage.\n\n**Outcome:** `.imd-findings.json` holds an empty findings list and nine coverage rows, one for each of the three listed entry points and six for the invariants and checklist areas I traced. The scratch test and temporary download were removed, so the tree is unchanged apart from the findings file.\n\n**What was checked**\n- **Supply constant.** The literal flagged by aderyn evaluates at compile time to exactly 10^27, matching the brief's one billion tokens at 18 decimals. The constructor mints it once to the deployer with checked arithmetic, and no burn path is reachable, so the supply can neither grow nor shrink.\n- **Transfer and transferFrom arithmetic.** The vendored OpenZeppelin ERC20 is byte-identical to the v5.0.2 tag on GitHub. Its balance check precedes the unchecked subtraction, the receiver add cannot exceed the fixed supply, and the allowance sentinel of max uint is never decremented. I exercised 1 wei, the full supply, supply plus one, max uint, zero value, self-transfers, exact-allowance consumption and the zero-address paths in a scratch test, and all behaved as the ERC-20 contract and README describe.\n- **Boundaries.** The token makes no external calls, has no payable, receive or fallback function, decodes no bytes and performs no division, scaling or narrowing cast, so the Math Precision and Numerical Gap failure modes have no site in this code.\n- **Deployment.** The constructor takes no arguments and calls nothing, and the existing CREATE2 factory test shows the factory alone receives the whole supply and that swarm, pool and remainder transfers arrive exact.\n\n**Not covered:** the protected launch harness itself was not executed here, since it needs the network's Uniswap v4 vendoring and environment variables that this review does not carry. The project's own 31 tests, including the invariant suite, pass.","treeHash":null,"usage":{"cachedInputTokens":704443,"inputTokens":322,"model":"claude-fable-5-1","outputTokens":11596,"runtime":"claude","turns":20,"wallClockMs":183897}},{"artifacts":[],"attempt":1,"bundleHash":"a1900af9e379b993250ec719e0c091b05358e1494db1016b4707ab1275871e1b","device":"85f8921773f3e9b5","findings":[],"hash":"f49c11773b8faefe2842ace8c23c66783324c5bc5b77b108d6672987dfeb1267","nodeId":"3d42aa95-a920-4ae7-9927-6a4328f19f87","outcome":"completed","summary":"Created `launch.json` matching Keelpad’s constructor, exact supply, pool settings, and required economics. No other deliverable files changed.\n\nValidation passed: manifest and constructor ABI checks, `forge build`, and all 31 tests using the supplied fuzz seed.","treeHash":"18298d04f519036f856cbd3457adefccd0be51c2","usage":{"cachedInputTokens":186880,"inputTokens":24635,"model":"gpt-6-astra","outputTokens":2157,"runtime":"codex","turns":3,"wallClockMs":55921}}],"verification":[{"checks":[{"durationMs":2637,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 2.49s\nCompiler run successful!\n","passed":true},{"durationMs":2904,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 30 tests for test/Keelpad.t.sol:KeelpadTest\n[PASS] testFuzz_ApprovalIsIsolatedToOwnerAndSpender(uint256) (runs: 1024, μ: 120939, ~: 121190)\n[PASS] testFuzz_InsufficientAllowanceRevertsAtomically(uint256,uint256) (runs: 1024, μ: 127852, ~: 128343)\nLogs:\n  Bound result 764220644668769763857983558\n  Bound result 161283696895680505258138698\n\n[PASS] testFuzz_OverdrawRevertsAtomically(uint256) (runs: 1024, μ: 71945, ~: 72268)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913898875159\n\n[PASS] testFuzz_TransferConservesSupply(address,uint256) (runs: 1024, μ: 95652, ~: 95879)\nLogs:\n  Bound result 194816201894008924507191650\n\n[PASS] testFuzz_TransferFromConsumesOnlyApprovedAmount(uint256,uint256) (runs: 1024, μ: 167989, ~: 169795)\nLogs:\n  Bound result 704504956851428655273923526\n  Bound result 419625814944446902992489340\n\n[PASS] test_ApprovalDoesNotRequireBalance() (gas: 88945)\n[PASS] test_ApproveReplacesAllowanceAndCanRevoke() (gas: 170585)\n[PASS] test_ConstructorEmitsExactlyOneMint() (gas: 12315)\n[PASS] test_Create2FactoryReceivesEverythingAndDistributesExactAmounts() (gas: 655217)\nLogs:\n  computeCreate2Address is deprecated. Please use vm.computeCreate2Address instead.\n\n[PASS] test_MetadataAndEntireInitialSupply() (gas: 111941)\n[PASS] test_NoMintBurnOrAdministrativeEntryPoints() (gas: 806005)\n[PASS] test_RevertWhenAllowanceWasRevoked() (gas: 113369)\n[PASS] test_RevertWhenApprovingZeroSpender() (gas: 40241)\n[PASS] test_RevertWhenDeployerTriesToSpendHolderFundsWithoutApproval() (gas: 161177)\n[PASS] test_RevertWhenSendingEther() (gas: 40104)\n[PASS] test_RevertWhenTransferExceedsBalance() (gas: 57645)\n[PASS] test_RevertWhenTransferFromExceedsAllowance() (gas: 120642)\n[PASS] test_RevertWhenTransferFromExceedsBalanceRestoresAllowance() (gas: 126157)\n[PASS] test_RevertWhenTransferFromHasNoAllowance() (gas: 60014)\n[PASS] test_RevertWhenTransferFromToZeroRestoresAllowance() (gas: 119115)\n[PASS] test_RevertWhenTransferToZeroEvenForZeroAmount() (gas: 75011)\n[PASS] test_RuntimeSizeAndForbiddenOpcodes() (gas: 786633)\n[PASS] test_SelfTransferPreservesBalance() (gas: 54273)\n[PASS] test_TransferDeliversExactAmountAndEmitsEvent() (gas: 96284)\n[PASS] test_TransferFromConsumesFiniteAllowanceAndEmitsTransfer() (gas: 249241)\n[PASS] test_TransferFromPreservesInfiniteAllowance() (gas: 212075)\n[PASS] test_TransferFromToSelfConsumesAllowanceWithoutChangingBalance() (gas: 110145)\n[PASS] test_TransferFullBalance() (gas: 78436)\n[PASS] test_ZeroTransferFromEmptyAccountEmitsEvent() (gas: 73365)\n[PASS] test_ZeroTransferFromWithoutApproval() (gas: 78771)\nSuite result: ok. 30 passed; 0 failed; 0 skipped; finished in 71.26ms (368.33ms CPU time)\n\nRan 1 test for test/Keelpad.invariant.t.sol:KeelpadInvariantTest\n[PASS] invariant_SupplyIsFixedAndAllBalancesAreConserved() (runs: 256, calls: 16384, reverts: 0)\n\n╭----------------+--------------+-------+---------+----------╮\n| Contract       | Selector     | Calls | Reverts | Discards |\n+============================================================+\n| KeelpadHandler | approve      | 3369  | 0       | 0        |\n|----------------+--------------+-------+---------+----------|\n| KeelpadHandler | overdraw     | 3327  | 0       | 0        |\n|----------------+--------------+-------+---------+----------|\n| KeelpadHandler | revoke       | 3241  | 0       | 0        |\n|----------------+--------------+-------+---------+----------|\n| KeelpadHandler | transfer     | 3304  | 0       | 0        |\n|----------------+--------------+-------+---------+----------|\n| KeelpadHandler | transferFrom | 3143  | 0       | 0        |\n╰----------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 443931323\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 2835717306\n  Bound result 9175975\n  Bound result 0\n  Bound result 5124\n  Bound result 4651600\n  Bound result 430199940\n  Bound result 3207\n  Bound result 5476\n  Bound result 18\n  Bound result 0\n  Bound result 0\n  Bound result 10000000000000000000\n  Bound result 434744747\n  Bound result 2918\n  Bound result 8938\n  Bound result 12\n  Bound result 1\n  Bound result 0\n  Bound result 18\n  Bound result 50000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 3259\n  Bound result 76\n  Bound result 0\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.71s (2.71s CPU time)\n\nRan 2 test suites in 2.72s (2.78s CPU time): 31 tests passed, 0 failed, 0 skipped (31 total tests)\n","passed":true},{"durationMs":111,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"Keelpad.approve(address,uint256)\",\"Keelpad.transfer(address,uint256)\",\"Keelpad.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":22,\"LICENSE\":21,\"README.md\":130,\"SECURITY.md\":33,\"dependencies.lock.json\":58,\"foundry.toml\":24,\"src/Keelpad.sol\":16,\"test/Keelpad.invariant.t.sol\":111,\"test/Keelpad.t.sol\":430},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":939,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":346,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/Keelpad.sol:10: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"b8a77071d5c97c9728864420af833de2e9e57d8f03ff85cccd0a7faa703ca312","verifiedTreeHash":"b4ecb941ea4b6fec0c0d5ac8bcb44553d04e6ba6","verifierVersion":"0.1.0+aca6c688"},{"checks":[{"durationMs":1561,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.46s\nCompiler run successful!\n","passed":true},{"durationMs":11238,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 30 tests for test/Keelpad.t.sol:KeelpadTest\n[PASS] testFuzz_ApprovalIsIsolatedToOwnerAndSpender(uint256) (runs: 1024, μ: 120959, ~: 121190)\n[PASS] testFuzz_InsufficientAllowanceRevertsAtomically(uint256,uint256) (runs: 1024, μ: 127801, ~: 128351)\nLogs:\n  Bound result 764220644668769763857983558\n  Bound result 161283696895680505258138698\n\n[PASS] testFuzz_OverdrawRevertsAtomically(uint256) (runs: 1024, μ: 71941, ~: 72268)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129639950\n\n[PASS] testFuzz_TransferConservesSupply(address,uint256) (runs: 1024, μ: 96116, ~: 96338)\nLogs:\n  Bound result 1191581684338593880247169445055803861025926395971\n  Bound result 405673944214969891631639609\n\n[PASS] testFuzz_TransferFromConsumesOnlyApprovedAmount(uint256,uint256) (runs: 1024, μ: 167826, ~: 169799)\nLogs:\n  Bound result 15077\n  Bound result 5969\n\n[PASS] test_ApprovalDoesNotRequireBalance() (gas: 88945)\n[PASS] test_ApproveReplacesAllowanceAndCanRevoke() (gas: 170585)\n[PASS] test_ConstructorEmitsExactlyOneMint() (gas: 12315)\n[PASS] test_Create2FactoryReceivesEverythingAndDistributesExactAmounts() (gas: 655217)\nLogs:\n  computeCreate2Address is deprecated. Please use vm.computeCreate2Address instead.\n\n[PASS] test_MetadataAndEntireInitialSupply() (gas: 111941)\n[PASS] test_NoMintBurnOrAdministrativeEntryPoints() (gas: 806005)\n[PASS] test_RevertWhenAllowanceWasRevoked() (gas: 113369)\n[PASS] test_RevertWhenApprovingZeroSpender() (gas: 40241)\n[PASS] test_RevertWhenDeployerTriesToSpendHolderFundsWithoutApproval() (gas: 161177)\n[PASS] test_RevertWhenSendingEther() (gas: 40104)\n[PASS] test_RevertWhenTransferExceedsBalance() (gas: 57645)\n[PASS] test_RevertWhenTransferFromExceedsAllowance() (gas: 120642)\n[PASS] test_RevertWhenTransferFromExceedsBalanceRestoresAllowance() (gas: 126157)\n[PASS] test_RevertWhenTransferFromHasNoAllowance() (gas: 60014)\n[PASS] test_RevertWhenTransferFromToZeroRestoresAllowance() (gas: 119115)\n[PASS] test_RevertWhenTransferToZeroEvenForZeroAmount() (gas: 75011)\n[PASS] test_RuntimeSizeAndForbiddenOpcodes() (gas: 786633)\n[PASS] test_SelfTransferPreservesBalance() (gas: 54273)\n[PASS] test_TransferDeliversExactAmountAndEmitsEvent() (gas: 96284)\n[PASS] test_TransferFromConsumesFiniteAllowanceAndEmitsTransfer() (gas: 249241)\n[PASS] test_TransferFromPreservesInfiniteAllowance() (gas: 212075)\n[PASS] test_TransferFromToSelfConsumesAllowanceWithoutChangingBalance() (gas: 110145)\n[PASS] test_TransferFullBalance() (gas: 78436)\n[PASS] test_ZeroTransferFromEmptyAccountEmitsEvent() (gas: 73365)\n[PASS] test_ZeroTransferFromWithoutApproval() (gas: 78771)\nSuite result: ok. 30 passed; 0 failed; 0 skipped; finished in 56.46ms (251.22ms CPU time)\n\nRan 17 tests for test/Keelpad.edges.t.sol:KeelpadEdgesTest\n[PASS] testFuzz_ApprovalReplacementAfterPartialSpending(uint256,uint256,uint256) (runs: 1024, μ: 222722, ~: 223666)\nLogs:\n  Bound result 18\n  Bound result 5\n\n[PASS] testFuzz_DelegatedOverdrawRestoresAnyFiniteAllowance(uint256,uint256,uint256) (runs: 1024, μ: 211342, ~: 211679)\nLogs:\n  Bound result 791165108548674196875587041\n  Bound result 40466040266001887418153897522029576008958014802337234125893\n  Bound result 21616333733877414298056051258295932821773958667702435\n\n[PASS] testFuzz_SplitTransferEqualsSingleTransfer(uint256,uint256) (runs: 1024, μ: 204589, ~: 205949)\nLogs:\n  Bound result 848113755\n  Bound result 829325331\n\n[PASS] testFuzz_TransferRoundTripPreservesBalancesAndApprovals(uint256,uint256) (runs: 1024, μ: 264967, ~: 265656)\nLogs:\n  Bound result 704504956851428655273923526\n\n[PASS] test_ApprovalIsNotTransitiveAndSpenderMayReceiveTokens() (gas: 273979)\n[PASS] test_ApprovalSurvivesFailedSpendAndCanUseFutureDeposit() (gas: 281671)\n[PASS] test_InfiniteApprovalCanBeReducedAndRevokedAfterSpending() (gas: 343431)\n[PASS] test_InfiniteApprovalCannotBurnViaTransferFromToZero() (gas: 194152)\n[PASS] test_MaximumDelegatedTransferCannotOverflowOrConsumeInfiniteApproval() (gas: 129314)\n[PASS] test_MaximumMinusOneAllowanceIsFinite() (gas: 210643)\n[PASS] test_MaximumTransferRevertsWithBalanceError() (gas: 65296)\n[PASS] test_OneWeiRoundTrip() (gas: 142984)\n[PASS] test_SelfTransferCannotBypassBalanceCheck() (gas: 213125)\n[PASS] test_SpendingAndRevokingOneApprovalDoesNotChangeAnother() (gas: 302318)\n[PASS] test_TransferFromOwnerStillRequiresItsOwnAllowance() (gas: 179698)\n[PASS] test_ZeroApprovalToZeroSpenderStillReverts() (gas: 48033)\n[PASS] test_ZeroDelegatedTransferEmitsEventAndPreservesApproval() (gas: 139525)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 57.97ms (227.24ms CPU time)\n\nRan 1 test for test/Keelpad.invariant.t.sol:KeelpadInvariantTest\n[PASS]\nKeelpadInvariantTest invariants:\n[PASS] invariant_AllAllowancesMatchOwnerAuthorizations\n[PASS] invariant_BalancesMatchAuthorizedTransfers\n[PASS] invariant_SupplyIsFixedAndAllBalancesAreConserved\n KeelpadInvariantTest invariants (runs: 256, calls: 32768, reverts: 0)\n\n╭----------------+----------------------+-------+---------+----------╮\n| Contract       | Selector             | Calls | Reverts | Discards |\n+====================================================================+\n| KeelpadHandler | approve              | 2958  | 0       | 0        |\n|----------------+----------------------+-------+---------+----------|\n| KeelpadHandler | approveBoundary      | 2983  | 0       | 0        |\n|----------------+----------------------+-------+---------+----------|\n| KeelpadHandler | approveZeroSpender   | 2882  | 0       | 0        |\n|----------------+----------------------+-------+---------+----------|\n| KeelpadHandler | attemptTransferFrom  | 2953  | 0       | 0        |\n|----------------+----------------------+-------+---------+----------|\n| KeelpadHandler | overdraw             | 3055  | 0       | 0        |\n|----------------+----------------------+-------+---------+----------|\n| KeelpadHandler | overdrawTransferFrom | 2920  | 0       | 0        |\n|----------------+----------------------+-------+---------+----------|\n| KeelpadHandler | revoke               | 2989  | 0       | 0        |\n|----------------+----------------------+-------+---------+----------|\n| KeelpadHandler | transfer             | 3040  | 0       | 0        |\n|----------------+----------------------+-------+---------+----------|\n| KeelpadHandler | transferFrom         | 3024  | 0       | 0        |\n|----------------+----------------------+-------+---------+----------|\n| KeelpadHandler | transferFromToZero   | 2910  | 0       | 0        |\n|----------------+----------------------+-------+---------+----------|\n| KeelpadHandler | transferFullBalance  | 3054  | 0       | 0        |\n╰----------------+----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 5\n  Bound result 0\n  Bound result 10948\n  Bound result 0\n  Bound result 7\n  Bound result 2000000000000000000\n  Bound result 10\n  Bound result 50000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 127\n  Bound result 311946976390274123570190531\n  Bound result 1\n  Bound result 6\n  Bound result 0\n  Bound result 7\n  Bound result 8\n  Bound result 5885\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 242\n  Bound result 0\n  Bound result 3899134705048131845757214\n  Bound result 0\n  Bound result 0\n  Bound result 517440284\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 100000000000000000000\n  Bound result 14\n  Bound result 999999900000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 255\n  Bound result 0\n  Bound result 5996\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 2\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 11.14s (11.14s CPU time)\n\nRan 3 test suites in 11.14s (11.25s CPU time): 48 tests passed, 0 failed, 0 skipped (48 total tests)\n","passed":true},{"durationMs":55,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"Keelpad.approve(address,uint256)\",\"Keelpad.transfer(address,uint256)\",\"Keelpad.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":22,\"LICENSE\":21,\"README.md\":130,\"SECURITY.md\":33,\"dependencies.lock.json\":58,\"foundry.toml\":24,\"src/Keelpad.sol\":16,\"test/Keelpad.edges.t.sol\":291,\"test/Keelpad.invariant.t.sol\":273,\"test/Keelpad.t.sol\":431},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"f24b17c81e2f7e3782888601832951b220fea39f4a4a91591d35273c642f2d02","verifiedTreeHash":"d5a40d1c85653a1940bd1dd3fd7174d3c583ffdf","verifierVersion":"0.1.0+aca6c688"},{"checks":[{"durationMs":1108,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.04s\nCompiler run successful!\n","passed":true},{"durationMs":1443,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 30 tests for test/Keelpad.t.sol:KeelpadTest\n[PASS] testFuzz_ApprovalIsIsolatedToOwnerAndSpender(uint256) (runs: 1024, μ: 120939, ~: 121190)\n[PASS] testFuzz_InsufficientAllowanceRevertsAtomically(uint256,uint256) (runs: 1024, μ: 127852, ~: 128343)\nLogs:\n  Bound result 15433\n  Bound result 20980\n\n[PASS] testFuzz_OverdrawRevertsAtomically(uint256) (runs: 1024, μ: 71945, ~: 72268)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129639947\n\n[PASS] testFuzz_TransferConservesSupply(address,uint256) (runs: 1024, μ: 95652, ~: 95879)\nLogs:\n  Bound result 354015622736172123530800587\n\n[PASS] testFuzz_TransferFromConsumesOnlyApprovedAmount(uint256,uint256) (runs: 1024, μ: 167989, ~: 169795)\nLogs:\n  Bound result 904446317892703889080881849\n  Bound result 6638170\n\n[PASS] test_ApprovalDoesNotRequireBalance() (gas: 88945)\n[PASS] test_ApproveReplacesAllowanceAndCanRevoke() (gas: 170585)\n[PASS] test_ConstructorEmitsExactlyOneMint() (gas: 12315)\n[PASS] test_Create2FactoryReceivesEverythingAndDistributesExactAmounts() (gas: 655217)\nLogs:\n  computeCreate2Address is deprecated. Please use vm.computeCreate2Address instead.\n\n[PASS] test_MetadataAndEntireInitialSupply() (gas: 111941)\n[PASS] test_NoMintBurnOrAdministrativeEntryPoints() (gas: 806005)\n[PASS] test_RevertWhenAllowanceWasRevoked() (gas: 113369)\n[PASS] test_RevertWhenApprovingZeroSpender() (gas: 40241)\n[PASS] test_RevertWhenDeployerTriesToSpendHolderFundsWithoutApproval() (gas: 161177)\n[PASS] test_RevertWhenSendingEther() (gas: 40104)\n[PASS] test_RevertWhenTransferExceedsBalance() (gas: 57645)\n[PASS] test_RevertWhenTransferFromExceedsAllowance() (gas: 120642)\n[PASS] test_RevertWhenTransferFromExceedsBalanceRestoresAllowance() (gas: 126157)\n[PASS] test_RevertWhenTransferFromHasNoAllowance() (gas: 60014)\n[PASS] test_RevertWhenTransferFromToZeroRestoresAllowance() (gas: 119115)\n[PASS] test_RevertWhenTransferToZeroEvenForZeroAmount() (gas: 75011)\n[PASS] test_RuntimeSizeAndForbiddenOpcodes() (gas: 786633)\n[PASS] test_SelfTransferPreservesBalance() (gas: 54273)\n[PASS] test_TransferDeliversExactAmountAndEmitsEvent() (gas: 96284)\n[PASS] test_TransferFromConsumesFiniteAllowanceAndEmitsTransfer() (gas: 249241)\n[PASS] test_TransferFromPreservesInfiniteAllowance() (gas: 212075)\n[PASS] test_TransferFromToSelfConsumesAllowanceWithoutChangingBalance() (gas: 110145)\n[PASS] test_TransferFullBalance() (gas: 78436)\n[PASS] test_ZeroTransferFromEmptyAccountEmitsEvent() (gas: 73365)\n[PASS] test_ZeroTransferFromWithoutApproval() (gas: 78771)\nSuite result: ok. 30 passed; 0 failed; 0 skipped; finished in 32.70ms (161.29ms CPU time)\n\nRan 1 test for test/Keelpad.invariant.t.sol:KeelpadInvariantTest\n[PASS] invariant_SupplyIsFixedAndAllBalancesAreConserved() (runs: 256, calls: 16384, reverts: 0)\n\n╭----------------+--------------+-------+---------+----------╮\n| Contract       | Selector     | Calls | Reverts | Discards |\n+============================================================+\n| KeelpadHandler | approve      | 3369  | 0       | 0        |\n|----------------+--------------+-------+---------+----------|\n| KeelpadHandler | overdraw     | 3327  | 0       | 0        |\n|----------------+--------------+-------+---------+----------|\n| KeelpadHandler | revoke       | 3241  | 0       | 0        |\n|----------------+--------------+-------+---------+----------|\n| KeelpadHandler | transfer     | 3304  | 0       | 0        |\n|----------------+--------------+-------+---------+----------|\n| KeelpadHandler | transferFrom | 3143  | 0       | 0        |\n╰----------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 443931323\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 2835717306\n  Bound result 9175975\n  Bound result 0\n  Bound result 5124\n  Bound result 4651600\n  Bound result 430199940\n  Bound result 3207\n  Bound result 5476\n  Bound result 18\n  Bound result 0\n  Bound result 0\n  Bound result 10000000000000000000\n  Bound result 434744747\n  Bound result 2918\n  Bound result 8938\n  Bound result 12\n  Bound result 1\n  Bound result 0\n  Bound result 18\n  Bound result 50000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 3259\n  Bound result 76\n  Bound result 0\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.37s (1.37s CPU time)\n\nRan 2 test suites in 1.37s (1.40s CPU time): 31 tests passed, 0 failed, 0 skipped (31 total tests)\n","passed":true},{"durationMs":31,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"Keelpad.approve(address,uint256)\",\"Keelpad.transfer(address,uint256)\",\"Keelpad.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":22,\"LICENSE\":21,\"README.md\":130,\"SECURITY.md\":33,\"dependencies.lock.json\":58,\"foundry.toml\":24,\"launch.json\":20,\"src/Keelpad.sol\":16,\"test/Keelpad.invariant.t.sol\":111,\"test/Keelpad.t.sol\":430},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"f49c11773b8faefe2842ace8c23c66783324c5bc5b77b108d6672987dfeb1267","verifiedTreeHash":"18298d04f519036f856cbd3457adefccd0be51c2","verifierVersion":"0.1.0+aca6c688"}]}