{"assessments":[],"deployments":[{"attestationHash":"97b7fb3cb7ad93461ddb27e2787b9ad3c43212166e3928834f55a026c9810753","chainId":1,"contracts":[{"address":"0x081e9c4c99eae0c97213dd55c0f440ce751f0d98","blockNumber":26194941,"name":"MerkleDistributor","role":"distributor","txHash":"0xdde86208866cbc2d9179ced2c3ceef71e90c6ca6f7f338184993bf7147c2f8d3"},{"address":"0x784ff9a3ac5d88a30bfff6f7f2a270161fbe6000","blockNumber":26194941,"name":"PoolInitializationGuard","role":"hook","txHash":"0xdde86208866cbc2d9179ced2c3ceef71e90c6ca6f7f338184993bf7147c2f8d3"},{"address":"0x474f5cd6826e5958ebc8c135e320c3c31844a976","blockNumber":26194941,"name":"CompanyToken","role":"token","txHash":"0xdde86208866cbc2d9179ced2c3ceef71e90c6ca6f7f338184993bf7147c2f8d3"}],"id":"84db74e4-4b25-4539-b887-ed7faf2772e2","manifestHash":"32c19885bbf1f393e3db8ac360e198cbba7d64079f63b83556becfbbb8a71ff7","status":"live"}],"fuzz":[],"identity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"interpretation":"Records acceptance and evidence. Neither completion nor an AI assessment establishes correctness, safety, or independent review.","jobId":"067ece2c-7353-46fe-bc2b-c84e853725fd","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"db900791807cf1eef7bc08a8783fefb39d3b01664325ab46754c1af49d71b1cf","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":"3fb5766e681e32a949a9eda4a1234c469b27f3758bb1d775981142fbfe87c3b3","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":"2375c36bef9d0c575362971a6ec3b4c062238a9853426b849733d6712902d518","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":"4d39a3846ed97d852726b89d4dafa166b39f639f0eeeb13e601181c12cf3b975","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":"a37dd3cffdcd0add6899215739c6f72f911fa089439a71e9ff5d6ef5e31fd77e","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":"144586d317ef281fd41a4246536223db5504f7e9a259fe7ced92862f78467fa4","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":"a44c3e5dcf11eb4001245d0c45515b38eabe12ee0592afe7e1393b58c048179d","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"f9b201a64ee78b3463e4e42ba56acfaa6b4f4d893fe8e63158e38764c745fce7","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: Company.md (COMD).\nToken name: Company.md\nToken symbol: COMD\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.","parentJobId":null,"planHash":"0133ddee8f875f1c5d89dbc135fbf781c4922f4969f6ff9d2a6db3b4dfa3502f","previousHash":"a23d82a8807e37705807a7c57c048103190796c0a8fe5b3212d4f3ff77287515","projectId":"067ece2c-7353-46fe-bc2b-c84e853725fd","publication":{"commit":"9d902e0b59d6c9120a432034ed013d01ae439811","deliveredAt":"2026-10-15T02:30:44.481Z","repoUrl":"https://github.com/identity-md-launches/launch-1804-company-md"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[],"site":null,"snapshotHash":"0c585cd003dcc9b45bf8fcdaf2a5fbe09292265572fcabb8b90675dfdf516617","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"a2ece4e1b6b512277a66fd3e54ca79f6328642aa00a7de09fe1e4982963b9da8","device":"ef31844bb462de78","findings":[],"hash":"144586d317ef281fd41a4246536223db5504f7e9a259fe7ced92862f78467fa4","nodeId":"e656b1f3-15f4-4d26-a819-12fa313d43ea","outcome":"completed","summary":"Done. The Company.md (COMD) token project is complete and verified at the repository root.\n\n**What was built**\n\n- `src/CompanyToken.sol`: contract `CompanyToken`, a thin wrapper over OpenZeppelin v5.3.0 `ERC20`. Name `Company.md`, symbol `COMD`, 18 decimals. The constructor takes no arguments, makes no external calls, and mints the whole supply of 1,000,000,000 tokens (1000000000000000000000000000 minor units) once to `msg.sender`. There is no owner, mint, burn, pause, blocklist, fee or upgrade path, so nothing in the protected floor's privileged-call lists has any effect.\n- `script/DeployCompanyToken.s.sol`: reference deploy script with a `deploy()` function the tests call directly. It reads no environment variables.\n- `test/CompanyToken.t.sol` and `test/DeployCompanyToken.t.sol`: 28 tests covering metadata, exact supply, single mint to a contract deployer rather than `tx.origin`, success and failure paths for transfer, approve and transferFrom, a rehearsal of the 10/80/10 launch flows arriving whole, the same admin and freeze selector sweeps the protected test runs, a bytecode scan for DELEGATECALL/CALLCODE/SELFDESTRUCT, and three fuzz tests for supply conservation and allowance accounting.\n- `foundry.toml`: `solc = \"0.8.26\"`, `bytecode_hash = \"none\"`, `cbor_metadata = false`, optimizer on, `ffi` off, empty `fs_permissions`.\n- `lib/forge-std` (v1.9.7) and `lib/openzeppelin-contracts` (v5.3.0) vendored as plain files with their licences. No `.git` directories or `.gitmodules` anywhere, so the offline verifier can build it.\n- `README.md`: design, assumptions, manifest-ready deployment parameters, an \"After launch\" section stating there is nothing to configure, and operational responsibilities including explorer verification and the recommendation for an independent review.\n\n**Verification results**\n\n| Check | Result |\n|---|---|\n| `forge build` (clean, solc 0.8.26) | pass |\n| `forge test` with the verifier's fuzz seed | 28 passed, 0 failed |\n| `forge fmt --check` | pass |\n\nSlither and Mythril are not installed on this machine and were not run. The new files are left in the working tree uncommitted, since the rules forbid touching `.git/`; no `launch.json` was written and no stand-in values were used, because the brief needed none.","treeHash":"006760080d0a0bae79a537098853aab74636b5e5","usage":{"cachedInputTokens":481150,"inputTokens":258,"model":"claude-fable-5-1","outputTokens":18046,"runtime":"claude","turns":19,"wallClockMs":226405}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"fea57d3e9d0ca7bf","findings":[{"citation":"resolved","description":"Merged from audit_permissions (id ef62de66...) and audit_flow (id 988b3fb2...), which report the same root cause. CompanyToken inherits OpenZeppelin v5.3.0 ERC20 unchanged (vendored copy verified byte-identical to upstream v5.3.0 for ERC20.sol, IERC20.sol, IERC20Metadata.sol, Context.sol and draft-IERC6093.sol). approve(spender, value) overwrites the allowance in _approve (lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol:286 `_allowances[owner][spender] = value;`) and transferFrom decrements it via _spendAllowance. Lowering a non-zero allowance can therefore be front-run by the spender, who spends the old allowance and then the new one. This is the ERC-20 standard's known design property, present in every compliant token; OpenZeppelin v5 intentionally dropped increaseAllowance/decreaseAllowance and the brief asks for a plain fixed-supply ERC-20. Exposure is bounded to the amounts a holder themself approved to a spender they chose; no third party, the deployer or the factory can move or freeze a holder's balance. Recorded as the only trust assumption carried by the three entry points. Not a defect in the requested design; no change required. If the author wants a mitigation, documenting 'set allowance to 0 before setting a new value' or adding ERC20Permit/increase-decrease helpers would be a design decision, not a fix.","line":14,"path":"src/CompanyToken.sol","reproduction":"State: factory (CREATE2 probe) holds the supply and transfers 200e18 COMD to alice. Calls: (1) alice: approve(bob, 100e18). (2) alice submits approve(bob, 50e18) to lower it. (3) bob front-runs (2) with transferFrom(alice, bob, 100e18) -> succeeds, allowance 0. (4) (2) lands -> allowance 50e18. (5) bob: transferFrom(alice, bob, 50e18) -> succeeds. Expected by alice: bob moves at most 100e18. Actual: balanceOf(bob) = 150e18, balanceOf(alice) = 50e18. Reproduced with forge test on test/scratch/Review.t.sol::test_approveOverwriteRaceMoves150 (all assertions pass on the current code).","severity":"info","snippet":"contract CompanyToken is ERC20 {","title":"Inherited ERC-20 approve() overwrite race: a spender can consume the old and the new allowance (standard ERC-20 behaviour, trust assumption, no fix required)"}],"hash":"2375c36bef9d0c575362971a6ec3b4c062238a9853426b849733d6712902d518","nodeId":"59b1c41d-8c07-4102-95f8-cd0a30ae3df0","outcome":"completed","summary":"Review complete. The findings file is written and the tree is otherwise unchanged.\n\n**Outcome:** no defects. The token is an unmodified OpenZeppelin v5.3.0 ERC-20 with a parameterless constructor that mints the full supply to the deployer. All three state-changing entry points hold.\n\n**What I verified**\n\n- **Specialists' findings:** audit_permissions and audit_flow both reported the same inherited ERC-20 approve overwrite race. I reproduced it in a scratch Foundry test and merged the two into one info-level finding, recorded as a trust assumption rather than a defect. The other two specialists and the test writer reported nothing.\n- **Library integrity:** the vendored ERC20.sol and its four dependencies are byte-identical to upstream OpenZeppelin v5.3.0.\n- **Deployment model:** deployed via CREATE2 from a probe contract, the token mints exactly the manifest's supply to the deployer, reports 18 decimals, and is far under both bytecode size limits.\n- **Launch flows:** transfers from the factory, distributor and an ordinary holder move exact amounts with the supply unchanged. transferFrom enforces allowances and refuses the deployer with no allowance.\n- **Attack surface:** no fallback or receive, unknown selectors and ETH revert, and the runtime bytecode contains no DELEGATECALL, CALLCODE or SELFDESTRUCT.\n- **Manifest:** launch.json uses only schema keys, an empty constructorArgs matching the constructor, and a totalSupply equal to what is minted.\n\nThe existing 54 project tests and my 7 scratch tests all pass. The static analysis lead about a large numeric literal is a style note on the supply constant and not a defect.\n\n**Deliverable:** `.imd-findings.json` holds 1 info finding and 7 coverage rows covering all 3 entry points plus the constructor, privileged-path, library-integrity and manifest invariants. The scratch test directory was removed.","treeHash":null,"usage":{"cachedInputTokens":392761,"inputTokens":194,"model":"claude-fable-5-1","outputTokens":9606,"runtime":"claude","turns":13,"wallClockMs":223496}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"829d84438fb3fdc8","findings":[{"citation":"resolved","description":"CompanyToken inherits OpenZeppelin v5.3.0 ERC20 unchanged. approve(spender, value) overwrites the allowance (lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol:126-130 -> _approve at 279-290). OpenZeppelin v5 removed increaseAllowance/decreaseAllowance and this token does not add ERC-2612 permit, so a holder who wants to lower an existing allowance has only approve(), which exposes the well-known ERC-20 front-running race: a spender watching the mempool can spend the old allowance before the new one lands and then spend the new one too. This is inherent to the ERC-20 standard the brief asks for, not a defect in the requested design, and is not a loss path for the launch flows (factory, distributor, pool manager use transfer, not allowances). It is recorded so the author can decide whether to document it or add ERC20Permit / increase-decrease helpers; no change is required to meet the brief. All other control-flow checks in the Execution Trace, Periphery and First Principles guides hold (see coverage).","line":14,"path":"src/CompanyToken.sol","reproduction":"State: factory sends alice 1000 COMD. 1) alice: approve(bob, 100). 2) alice intends to reduce and submits approve(bob, 50). 3) bob front-runs step 2 with transferFrom(alice, bob, 100) -> succeeds, allowance 0. 4) step 2 mines, allowance becomes 50. 5) bob: transferFrom(alice, bob, 50) -> succeeds. Expected by alice: at most 100 ever movable (she was lowering it to 50). Actual: bob moved 150; balanceOf(bob)=150, balanceOf(alice)=850. Verified in test/scratch/EdgeTrace.t.sol test_approveOverwriteRaceMoves150.","severity":"info","snippet":"contract CompanyToken is ERC20 {","title":"Inherited approve() has the standard ERC-20 overwrite race (no increase/decrease or permit path)"}],"hash":"3fb5766e681e32a949a9eda4a1234c469b27f3758bb1d775981142fbfe87c3b3","nodeId":"f78fdb72-f2cd-4c3b-8d56-5dc89a316ad1","outcome":"completed","summary":"The review is complete. The findings file is valid JSON, the quoted snippet matches the tree at the cited line, and the working tree shows no modified tracked files. The only files I created are the findings file and a scratch test, both of which are untracked and ignored by git.\n\n**Outcome: no defects found in the control flow.** The token is OpenZeppelin v5.3.0 ERC20 with a single constructor line that mints the full supply to the deployer. Every path I traced behaves as the brief and the launch floor require.\n\n**What I covered**\n\n- **Execution Trace.** Traced approve, transfer and transferFrom through the inherited internals with concrete inputs. The zero-address sender and receiver paths revert even at zero value, so transferFrom cannot act as a mint or burn. Unlimited allowance is not decremented, which is standard OpenZeppelin behaviour. There are no external calls, callbacks, sentinel branches, encoding steps or multi-step state, so none of the within-transaction or cross-transaction failure modes apply.\n- **Periphery.** Read the vendored ERC20, Context and the three interface files in full. They are identical to upstream v5.3.0. The compiled ABI exposes only the standard ERC-20 functions, events and errors plus four constant getters. Storage layout is the standard five slots.\n- **First Principles.** The supply constant evaluates to exactly one billion tokens at 18 decimals, is minted once to msg.sender rather than tx.origin, and the constructor takes no arguments and makes no external calls. Launch flows move exact amounts because nothing taxes or burns on transfer.\n- **Tests.** The project suite passes, and I wrote eight additional scratch tests confirming the edge paths above plus a fuzzed conservation check. All pass.\n\n**One info-level note recorded.** The inherited approve has the standard ERC-20 overwrite race. A spender holding an allowance of 100 can front-run a reduction to 50 and move 150 in total. This is inherent to the specification the brief asks for, not a defect in the code, and does not touch the launch flows. I logged it so the author can decide whether to document it or add permit or increase-and-decrease helpers.\n\n**Coverage record.** All three listed entry points have rows, plus rows for the constructor, the supply invariant, the vendored periphery, the deploy script and the absence of receive or fallback. Slither reported nothing. Aderyn's low-severity numeric-literal note is a style item and was not promoted.","treeHash":null,"usage":{"cachedInputTokens":639870,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":15312,"runtime":"claude","turns":29,"wallClockMs":235147}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"7e64d4917fa814e6","findings":[],"hash":"4d39a3846ed97d852726b89d4dafa166b39f639f0eeeb13e601181c12cf3b975","nodeId":"a812e79f-901d-4f79-a3f5-91a135d8ce11","outcome":"completed","summary":"The review is complete. The findings file is valid JSON and the working tree is clean apart from it.\n\n**Result: no defects in the Math Precision, Boundary or Numerical Gap areas.** The findings list is empty, with seven coverage rows, all `holds`.\n\n**What was checked**\n\n- **Supply constant.** The expression on line 26 is a compile-time checked constant that evaluates to exactly 10^27, matching the brief and the README. The aderyn \"large numeric literal\" lead is not a defect.\n- **Arithmetic paths.** All of them are OpenZeppelin v5.3.0 `ERC20`, which I confirmed is the upstream text verbatim in the vendored library. The mint uses a checked add. The unchecked subtract and add in transfers are bounded by the balance check and by the fixed supply, so neither can wrap.\n- **Boundaries.** The token makes no external calls, has no payable, receive or fallback function, no sentinel-address branch beyond the standard zero-address reverts, and decodes no bytes. There is no division, no fixed-point scale and no downcast, so zero-rounding, truncation amplification and decimal mismatch have no site to occur.\n- **Concrete edge tests I ran** in a scratch file, all passing: full-supply round trip, 1-wei and zero-value transfers from an empty account, self-transfer through an allowance, allowance exactly consumed then one more wei refused, allowance at max minus one decrementing while max does not, moving the whole supply under a max allowance, a max-uint transfer reverting, and a zero-address sender through `transferFrom` reverting before any state change. A 256-run invariant test over random transfers kept the sum of balances equal to the total supply.\n- **Entry points.** All three listed entry points are recorded as `holds`, with the reason for each.\n\n**Coverage limits.** My area is fully covered. The protected floor's pool seed and swap tests need the verifier's environment and were not run here. The three guides for other areas were not applied beyond what overlapped with mine.\n\nOne maintenance note, not reported as a finding: the `TOKEN_DECIMALS` constant is not wired into `decimals()`, which stays at OpenZeppelin's default. Both are 18 today, so the shipped code is correct, but a future edit to the constant would scale the supply without changing what `decimals()` returns.","treeHash":null,"usage":{"cachedInputTokens":600695,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":10677,"runtime":"claude","turns":21,"wallClockMs":169573}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"1f78880cc572868c","findings":[{"citation":"resolved","description":"Area: Asymmetry (approve <-> pull pair) and Trust Gap (economics x asymmetry between approver and spender). CompanyToken inherits OpenZeppelin v5.3.0 ERC20 unchanged. approve(spender, value) overwrites the allowance (lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol:286 `_allowances[owner][spender] = value;`) and transferFrom decrements it (`_spendAllowance`). Neither side checkpoints what was already spent, so an approver who lowers a non-zero allowance can be front-run by the spender, who then spends the old allowance and the new one. This is the well-known ERC-20 design property, not an implementation defect: it exists in every compliant ERC-20, OpenZeppelin v5 deliberately removed increaseAllowance/decreaseAllowance, and the brief asks for a plain fixed-supply ERC-20. It is recorded here as the only trust assumption the three entry points carry so the author and the judge can see it was examined. The exposure is bounded by the holder's own approve() calls to a spender they chose; no third party, the deployer, or the factory can move or freeze any holder's balance (verified: transferFrom from the deployer with zero allowance reverts ERC20InsufficientAllowance). Mitigation, if the author wants one without changing the design: approvers set allowance to 0 before setting a new non-zero value, or use exact-amount approvals. Adding increaseAllowance/decreaseAllowance would be a design change and is not asked for.","line":14,"path":"src/CompanyToken.sol","reproduction":"State: factory deployed the token and sent alice 200e18 COMD. Sequence: (1) alice: approve(bob, 100e18). (2) alice intends to lower it and submits approve(bob, 50e18). (3) bob sees (2) in the mempool and first calls transferFrom(alice, bob, 100e18) -> succeeds, allowance 0. (4) alice's approve(bob, 50e18) lands -> allowance 50e18. (5) bob: transferFrom(alice, bob, 50e18) -> succeeds. Expected by alice: bob can take at most 100e18 (her highest ever grant). Actual: bob holds 150e18 and alice holds 50e18. Reproduced in Foundry with the exact calls above (test_approveRaceMoves150 in a scratch test; all five assertions pass on the current code).","severity":"info","snippet":"contract CompanyToken is ERC20 {","title":"Inherited ERC-20 approve/transferFrom race: a spender can consume both the old and the new allowance (standard ERC-20 behaviour, trust assumption, no fix required)"}],"hash":"a37dd3cffdcd0add6899215739c6f72f911fa089439a71e9ff5d6ef5e31fd77e","nodeId":"371e42b7-59cb-48f2-b573-6910d5d18bb2","outcome":"completed","summary":"The review is complete and the report is written to `.imd-findings.json`. No files in the tree were changed, and the scratch test was removed.\n\n**Outcome: no defects in the Access Control, Trust Gap or Asymmetry areas.** The token is OpenZeppelin v5.3.0 ERC20 with a single constructor line that mints the full supply to the deployer. It has no owner, no roles, no initializer, no receive or fallback, and no override of any transfer path.\n\nWhat I verified:\n\n- **Permission map.** The compiled ABI exposes exactly three state-changing functions: approve, transfer and transferFrom. Each acts only on the caller's own balance or allowance. The deployer and factory have no power over a holder: a transferFrom from the deployer with no allowance reverts.\n- **Asymmetry.** transfer and transferFrom produce identical balance deltas and leave totalSupply unchanged. Approve overwrites rather than accumulates. Fuzzed conservation of supply across transfer and transferFrom chains holds.\n- **Dependency integrity.** The five vendored OpenZeppelin files the token depends on are byte-identical to the upstream v5.3.0 tag. The context helper returns plain msg.sender, so no forwarder can spoof a sender.\n- **Launch floor.** Traced the protected test: empty constructor arguments, supply of exactly 1e27 minted to the factory, no fee or burn on any flow, no privileged selector changes supply or a balance. The existing 28-test suite passes.\n- **Static leads.** The aderyn large-literal lead evaluates to exactly the brief's supply, so it is not a finding. Slither reported nothing.\n\nOne info-level entry is recorded: the standard ERC-20 approve front-run, where a spender can consume both an old and a newly lowered allowance. It is inherent to the standard, bounded by the holder's own approvals, and does not require a fix. It is documented so the judge can see the trust assumption was examined. The coverage record answers all three listed entry points plus five invariant rows.","treeHash":null,"usage":{"cachedInputTokens":463013,"inputTokens":194,"model":"claude-fable-5-1","outputTokens":11212,"runtime":"claude","turns":20,"wallClockMs":162466}},{"artifacts":[],"attempt":1,"bundleHash":"428ae4bb1cff696ca3338dc02840f577432d3692b7721536c02115436b4e02fb","device":"eaa98ad0794d4f76","findings":[],"hash":"a44c3e5dcf11eb4001245d0c45515b38eabe12ee0592afe7e1393b58c048179d","nodeId":"f62c6bf2-6335-481c-b81e-f533e26e0fc1","outcome":"completed","summary":"Created [launch.json](/home/imd/.identitymd/work/067ece2c-7353-46fe-bc2b-c84e853725fd/f62c6bf2-6335-481c-b81e-f533e26e0fc1/launch.json) matching `CompanyToken`, its exact supply, empty constructor arguments, and the required pool and economics.\n\n`forge build` succeeded. All 28 tests passed with the supplied fuzz seed. Only `launch.json` changed outside permitted scratch artifacts.","treeHash":"ee25d7ec9895a56292e147e07a4004fb37baa2aa","usage":{"cachedInputTokens":229504,"inputTokens":41793,"model":"gpt-6-astra","outputTokens":2478,"runtime":"codex","turns":3,"wallClockMs":75553}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"4be5e039e1c77ce3","findings":[],"hash":"db900791807cf1eef7bc08a8783fefb39d3b01664325ab46754c1af49d71b1cf","nodeId":"5d60f727-8778-4124-a648-a512e2ced5fb","outcome":"completed","summary":"The review is complete and the findings file is in place. Nothing else is pending.\n\n**Outcome: no defects found.** `.imd-findings.json` holds an empty findings list and eight coverage rows, all `holds`. No tracked file changed. The worker's own exclude rule hides the findings file from git status, which is expected.\n\n**What the token is.** `CompanyToken` inherits OpenZeppelin v5.3.0 ERC20 and overrides nothing. The constructor takes no arguments, makes no external call, and mints exactly 1e27 minor units to the deployer. There is no owner, minter, pause, blocklist, fee, burn, hook, receive or fallback.\n\n**What I checked against the three guides.**\n- Economic Security: no external dependencies to break, no token misbehaviour to exploit, no privileged surface. Sentinel addresses revert rather than silently succeed. ERC-20 compliance is full.\n- Invariant: sum of balances equals totalSupply and totalSupply is fixed forever. The only mint is the constructor, no burn path exists, and transfers to the zero address revert. A scratch handler-driven invariant test over 4096 calls never broke it.\n- Flow Gap: every launch flow moves exactly its amount, so the factory, distributor, PoolManager and requester all receive what the floor expects. No exemption list exists to misconfigure.\n\n**Verification run.** The vendored ERC20 reads line for line as upstream OpenZeppelin v5. The project's 28 tests pass, including under a second fuzz seed with 1000 runs, and `forge fmt --check` is clean. The protected custom_token floor tests cannot run in this tree because they import the floor's own harness, so I traced each of their checks by hand instead. All scratch tests were removed.\n\n**Static analysis leads.** Slither reported nothing. Aderyn's large-numeric-literal note on line 26 is the supply constant, which is correct and intended, so it is not a finding.","treeHash":null,"usage":{"cachedInputTokens":990865,"inputTokens":418,"model":"claude-fable-5-1","outputTokens":11494,"runtime":"claude","turns":14,"wallClockMs":239980}},{"artifacts":[],"attempt":1,"bundleHash":"4a8b8016a329b3d370641e558c01544ba44525a648fb837ebf44faf63c9d929b","device":"6d41a24119881b34","findings":[],"hash":"f9b201a64ee78b3463e4e42ba56acfaa6b4f4d893fe8e63158e38764c745fce7","nodeId":"10b9ba52-c6a9-46b6-90d6-2e76b9d9aee1","outcome":"completed","summary":"Added failure-path, boundary, fuzz, and five-actor invariant tests under `test/`.\n\nVerified offline with the required seed: `forge build` and `forge test` pass—54 tests, including four invariants across 32,768 random calls.\n\nNo implementation defects found. Only three files under `test/` were added.","treeHash":"0424555da66e56f4c7b51d40b2ae359623b401b3","usage":{"cachedInputTokens":777984,"inputTokens":73682,"model":"gpt-6-astra","outputTokens":14850,"runtime":"codex","turns":7,"wallClockMs":397958}}],"verification":[{"checks":[{"durationMs":894,"exitCode":0,"name":"build","output":"Compiling 29 files with Solc 0.8.26\nSolc 0.8.26 finished in 826.30ms\nCompiler run successful!\n","passed":true},{"durationMs":86,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 2 tests for test/DeployCompanyToken.t.sol:DeployCompanyTokenTest\n[PASS] test_deployMintsSupplyToTheDeployingContract() (gas: 1545060)\n[PASS] test_twoDeploymentsAreIndependent() (gas: 2116494)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 520.78µs (475.68µs CPU time)\n\nRan 26 tests for test/CompanyToken.t.sol:CompanyTokenTest\n[PASS] testFuzz_transferAboveBalanceReverts(uint256,uint256) (runs: 256, μ: 104269, ~: 105421)\nLogs:\n  Bound result 22\n  Bound result 938463463374614917980283695\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 256, μ: 104694, ~: 104791)\nLogs:\n  Bound result 371566089152408866903386143\n\n[PASS] testFuzz_transferFromRespectsAllowance(uint256,uint256) (runs: 256, μ: 184088, ~: 158015)\nLogs:\n  Bound result 364239179738218499142248918\n  Bound result 936930746271571267885323958\n\n[PASS] test_approveSetsAllowanceAndEmits() (gas: 113419)\n[PASS] test_approveZeroSpenderReverts() (gas: 32949)\n[PASS] test_constructorEmitsSingleMintTransfer() (gas: 19491)\n[PASS] test_deployerIsMsgSenderNotTxOrigin() (gas: 285556)\n[PASS] test_launchFlowsMoveExactly() (gas: 291428)\n[PASS] test_metadata() (gas: 58685)\n[PASS] test_mintsWholeSupplyToDeployerOnce() (gas: 44002)\n[PASS] test_noAdminCallIncreasesSupply() (gas: 714160)\n[PASS] test_noPrivilegedCallMovesOrFreezesAHolder() (gas: 470324)\n[PASS] test_runtimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 2786015)\n[PASS] test_supplyConstantMatchesBrief() (gas: 17446)\n[PASS] test_transferFromRevertsOnInsufficientAllowance() (gas: 154833)\n[PASS] test_transferFromRevertsWhenOwnerBalanceTooLow() (gas: 153419)\n[PASS] test_transferFromSpendsAllowance() (gas: 213583)\n[PASS] test_transferFromWithMaxAllowanceDoesNotDecrease() (gas: 195639)\n[PASS] test_transferFromWithoutApprovalReverts() (gas: 100163)\n[PASS] test_transferMovesExactAmount() (gas: 181200)\n[PASS] test_transferRevertsFromEmptyAccount() (gas: 37782)\n[PASS] test_transferRevertsOnInsufficientBalance() (gas: 104629)\n[PASS] test_transferToSelfKeepsBalance() (gas: 103575)\n[PASS] test_transferToZeroAddressReverts() (gas: 99382)\n[PASS] test_transferWholeBalanceAndZeroAmount() (gas: 183014)\n[PASS] test_unknownSelectorAndPlainEtherReverts() (gas: 62228)\nSuite result: ok. 26 passed; 0 failed; 0 skipped; finished in 12.18ms (38.20ms CPU time)\n\nRan 2 test suites in 13.00ms (12.70ms CPU time): 28 tests passed, 0 failed, 0 skipped (28 total tests)\n","passed":true},{"durationMs":32,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"CompanyToken.approve(address,uint256)\",\"CompanyToken.transfer(address,uint256)\",\"CompanyToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"README.md\":150,\"foundry.toml\":21,\"remappings.txt\":2,\"script/DeployCompanyToken.s.sol\":24,\"src/CompanyToken.sol\":33,\"test/CompanyToken.t.sol\":395,\"test/DeployCompanyToken.t.sol\":29},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":532,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":235,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/CompanyToken.sol:26: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"144586d317ef281fd41a4246536223db5504f7e9a259fe7ced92862f78467fa4","verifiedTreeHash":"006760080d0a0bae79a537098853aab74636b5e5","verifierVersion":"0.1.0+aca6c688"},{"checks":[{"durationMs":1013,"exitCode":0,"name":"build","output":"Compiling 29 files with Solc 0.8.26\nSolc 0.8.26 finished in 917.51ms\nCompiler run successful!\n","passed":true},{"durationMs":123,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 2 tests for test/DeployCompanyToken.t.sol:DeployCompanyTokenTest\n[PASS] test_deployMintsSupplyToTheDeployingContract() (gas: 1545060)\n[PASS] test_twoDeploymentsAreIndependent() (gas: 2116494)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 503.64µs (529.75µs CPU time)\n\nRan 26 tests for test/CompanyToken.t.sol:CompanyTokenTest\n[PASS] testFuzz_transferAboveBalanceReverts(uint256,uint256) (runs: 256, μ: 104269, ~: 105421)\nLogs:\n  Bound result 22\n  Bound result 938463463374614917980283695\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 256, μ: 104694, ~: 104791)\nLogs:\n  Bound result 870533306458335622191431580\n\n[PASS] testFuzz_transferFromRespectsAllowance(uint256,uint256) (runs: 256, μ: 184088, ~: 158015)\nLogs:\n  Bound result 22\n  Bound result 938463463374607091485844535\n\n[PASS] test_approveSetsAllowanceAndEmits() (gas: 113419)\n[PASS] test_approveZeroSpenderReverts() (gas: 32949)\n[PASS] test_constructorEmitsSingleMintTransfer() (gas: 19491)\n[PASS] test_deployerIsMsgSenderNotTxOrigin() (gas: 285556)\n[PASS] test_launchFlowsMoveExactly() (gas: 291428)\n[PASS] test_metadata() (gas: 58685)\n[PASS] test_mintsWholeSupplyToDeployerOnce() (gas: 44002)\n[PASS] test_noAdminCallIncreasesSupply() (gas: 714160)\n[PASS] test_noPrivilegedCallMovesOrFreezesAHolder() (gas: 470324)\n[PASS] test_runtimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 2786015)\n[PASS] test_supplyConstantMatchesBrief() (gas: 17446)\n[PASS] test_transferFromRevertsOnInsufficientAllowance() (gas: 154833)\n[PASS] test_transferFromRevertsWhenOwnerBalanceTooLow() (gas: 153419)\n[PASS] test_transferFromSpendsAllowance() (gas: 213583)\n[PASS] test_transferFromWithMaxAllowanceDoesNotDecrease() (gas: 195639)\n[PASS] test_transferFromWithoutApprovalReverts() (gas: 100163)\n[PASS] test_transferMovesExactAmount() (gas: 181200)\n[PASS] test_transferRevertsFromEmptyAccount() (gas: 37782)\n[PASS] test_transferRevertsOnInsufficientBalance() (gas: 104629)\n[PASS] test_transferToSelfKeepsBalance() (gas: 103575)\n[PASS] test_transferToZeroAddressReverts() (gas: 99382)\n[PASS] test_transferWholeBalanceAndZeroAmount() (gas: 183014)\n[PASS] test_unknownSelectorAndPlainEtherReverts() (gas: 62228)\nSuite result: ok. 26 passed; 0 failed; 0 skipped; finished in 10.71ms (44.16ms CPU time)\n\nRan 2 test suites in 13.80ms (11.21ms CPU time): 28 tests passed, 0 failed, 0 skipped (28 total tests)\n","passed":true},{"durationMs":54,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"CompanyToken.approve(address,uint256)\",\"CompanyToken.transfer(address,uint256)\",\"CompanyToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"README.md\":150,\"foundry.toml\":21,\"launch.json\":24,\"remappings.txt\":2,\"script/DeployCompanyToken.s.sol\":24,\"src/CompanyToken.sol\":33,\"test/CompanyToken.t.sol\":395,\"test/DeployCompanyToken.t.sol\":29},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"a44c3e5dcf11eb4001245d0c45515b38eabe12ee0592afe7e1393b58c048179d","verifiedTreeHash":"ee25d7ec9895a56292e147e07a4004fb37baa2aa","verifierVersion":"0.1.0+aca6c688"},{"checks":[{"durationMs":4005,"exitCode":0,"name":"build","output":"Compiling 32 files with Solc 0.8.26\nSolc 0.8.26 finished in 3.85s\nCompiler run successful!\n","passed":true},{"durationMs":33237,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 2 tests for test/DeployCompanyToken.t.sol:DeployCompanyTokenTest\n[PASS] test_deployMintsSupplyToTheDeployingContract() (gas: 1545060)\n[PASS] test_twoDeploymentsAreIndependent() (gas: 2116494)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 937.09µs (840.99µs CPU time)\n\nRan 26 tests for test/CompanyToken.t.sol:CompanyTokenTest\n[PASS] testFuzz_transferAboveBalanceReverts(uint256,uint256) (runs: 256, μ: 104453, ~: 105439)\nLogs:\n  Bound result 22\n  Bound result 4\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 256, μ: 104681, ~: 104803)\nLogs:\n  Bound result 1\n\n[PASS] testFuzz_transferFromRespectsAllowance(uint256,uint256) (runs: 256, μ: 186695, ~: 213302)\nLogs:\n  Bound result 104844331023\n  Bound result 1266\n\n[PASS] test_approveSetsAllowanceAndEmits() (gas: 113419)\n[PASS] test_approveZeroSpenderReverts() (gas: 32949)\n[PASS] test_constructorEmitsSingleMintTransfer() (gas: 19491)\n[PASS] test_deployerIsMsgSenderNotTxOrigin() (gas: 285556)\n[PASS] test_launchFlowsMoveExactly() (gas: 291428)\n[PASS] test_metadata() (gas: 58685)\n[PASS] test_mintsWholeSupplyToDeployerOnce() (gas: 44002)\n[PASS] test_noAdminCallIncreasesSupply() (gas: 714160)\n[PASS] test_noPrivilegedCallMovesOrFreezesAHolder() (gas: 470324)\n[PASS] test_runtimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 2786015)\n[PASS] test_supplyConstantMatchesBrief() (gas: 17446)\n[PASS] test_transferFromRevertsOnInsufficientAllowance() (gas: 154833)\n[PASS] test_transferFromRevertsWhenOwnerBalanceTooLow() (gas: 153419)\n[PASS] test_transferFromSpendsAllowance() (gas: 213583)\n[PASS] test_transferFromWithMaxAllowanceDoesNotDecrease() (gas: 195639)\n[PASS] test_transferFromWithoutApprovalReverts() (gas: 100163)\n[PASS] test_transferMovesExactAmount() (gas: 181200)\n[PASS] test_transferRevertsFromEmptyAccount() (gas: 37782)\n[PASS] test_transferRevertsOnInsufficientBalance() (gas: 104629)\n[PASS] test_transferToSelfKeepsBalance() (gas: 103575)\n[PASS] test_transferToZeroAddressReverts() (gas: 99382)\n[PASS] test_transferWholeBalanceAndZeroAmount() (gas: 183014)\n[PASS] test_unknownSelectorAndPlainEtherReverts() (gas: 62228)\nSuite result: ok. 26 passed; 0 failed; 0 skipped; finished in 195.60ms (564.23ms CPU time)\n\nRan 24 tests for test/CompanyTokenBoundary.t.sol:CompanyTokenBoundaryTest\n[PASS] testFuzz_approvalReplacementIsIdempotentAndIsolated(uint256,uint256) (runs: 1000, μ: 277169, ~: 277586)\n[PASS] testFuzz_delegatedSelfTransferOnlySpendsAllowance(uint256,uint256,uint256) (runs: 1000, μ: 225989, ~: 226677)\nLogs:\n  Bound result 55789290406791312242741152\n  Bound result 14528049836912062710640274\n  Bound result 184144550921311900461484216852781728501155533\n\n[PASS] testFuzz_insufficientAllowanceLeavesAllStateUnchanged(uint256,uint256,uint256) (runs: 1000, μ: 218436, ~: 220071)\nLogs:\n  Bound result 641215403937109041017922611\n  Bound result 640798869562048713075975656\n  Bound result 640817709276584647821249909\n\n[PASS] testFuzz_splitDelegatedSpendingMatchesTotal(uint256,uint256,uint256) (runs: 1000, μ: 286790, ~: 288423)\nLogs:\n  Bound result 10063\n  Bound result 255\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129630606\n\n[PASS] testFuzz_splitTransferEqualsSingleTransfer(uint256,uint256) (runs: 1000, μ: 204553, ~: 205964)\nLogs:\n  Bound result 0\n  Bound result 0\n\n[PASS] testFuzz_transferFromInsufficientBalanceRollsBackAllowance(uint256,uint256) (runs: 1000, μ: 221699, ~: 222402)\nLogs:\n  Bound result 626601533009929509538214860\n  Bound result 115792089237316195423570985008687907853269984665639937437924574085994548308904\n\n[PASS] testFuzz_transferRoundTripRestoresBalances(uint256) (runs: 1000, μ: 149199, ~: 148895)\nLogs:\n  Bound result 12699\n\n[PASS] testFuzz_zeroRecipientRollsBackDelegatedTransfer(uint256,uint256) (runs: 1000, μ: 226545, ~: 227320)\nLogs:\n  Bound result 20000000000000000000\n  Bound result 115792089237316195423570985008687907853269984665640564039437584007913129663235\n\n[PASS] test_approvalBeforeFundingCanBeUsedAfterFunding() (gas: 289399)\n[PASS] test_approvalDoesNotAuthorizeAnotherSpender() (gas: 223740)\n[PASS] test_constructorLogsExactlyOneMint() (gas: 23850)\n[PASS] test_exhaustedAllowanceCannotBeSpentTwice() (gas: 279955)\n[PASS] test_maximumMinusOneApprovalIsFinite() (gas: 233354)\n[PASS] test_maximumTransferAmountRevertsWithoutOverflow() (gas: 88838)\n[PASS] test_maximumTransferFromRevertsAndKeepsInfiniteApproval() (gas: 206792)\n[PASS] test_oneWeiAndEntireSupplyCanRoundTrip() (gas: 266326)\n[PASS] test_ownerUsingTransferFromNeedsItsOwnAllowance() (gas: 315222)\n[PASS] test_revokingInfiniteApprovalImmediatelyStopsSpending() (gas: 293596)\n[PASS] test_selfTransferStillRequiresSufficientBalance() (gas: 141262)\n[PASS] test_transferFromZeroOwnerCannotMintEvenZero() (gas: 130620)\n[PASS] test_transferToTokenContractIsNotABurn() (gas: 92257)\n[PASS] test_zeroApprovalToZeroSpenderStillReverts() (gas: 98966)\n[PASS] test_zeroTransferToZeroAddressStillReverts() (gas: 96590)\n[PASS] test_zeroTransfersFromEmptyAccountEmitEvents() (gas: 150245)\nSuite result: ok. 24 passed; 0 failed; 0 skipped; finished in 195.97ms (1.53s CPU time)\n\nRan 2 tests for test/CompanyTokenInvariant.t.sol:CompanyTokenInvariantTest\n[PASS]\nCompanyTokenInvariantTest invariants:\n[PASS] invariant_allSupplyIsAccountedFor\n[PASS] invariant_allowancesMatchApprovalsAndSuccessfulSpending\n[PASS] invariant_eachBalanceMatchesTransferJournal\n[PASS] invariant_supplyAndMetadataNeverChange\n CompanyTokenInvariantTest invariants (runs: 256, calls: 32768, reverts: 0)\n\n╭---------------------+--------------------------+-------+---------+----------╮\n| Contract            | Selector                 | Calls | Reverts | Discards |\n+=============================================================================+\n| CompanyTokenHandler | approve                  | 2898  | 0       | 0        |\n|---------------------+--------------------------+-------+---------+----------|\n| CompanyTokenHandler | approveAndTransferFrom   | 2996  | 0       | 0        |\n|---------------------+--------------------------+-------+---------+----------|\n| CompanyTokenHandler | rejectDelegatedOverdraft | 2907  | 0       | 0        |\n|---------------------+--------------------------+-------+---------+----------|\n| CompanyTokenHandler | rejectOverAllowance      | 2981  | 0       | 0        |\n|---------------------+--------------------------+-------+---------+----------|\n| CompanyTokenHandler | rejectOverdraft          | 2949  | 0       | 0        |\n|---------------------+--------------------------+-------+---------+----------|\n| CompanyTokenHandler | rejectZeroRecipient      | 2956  | 0       | 0        |\n|---------------------+--------------------------+-------+---------+----------|\n| CompanyTokenHandler | rejectZeroSpender        | 3040  | 0       | 0        |\n|---------------------+--------------------------+-------+---------+----------|\n| CompanyTokenHandler | revoke                   | 2957  | 0       | 0        |\n|---------------------+--------------------------+-------+---------+----------|\n| CompanyTokenHandler | roundTrip                | 3051  | 0       | 0        |\n|---------------------+--------------------------+-------+---------+----------|\n| CompanyTokenHandler | transfer                 | 2988  | 0       | 0        |\n|---------------------+--------------------------+-------+---------+----------|\n| CompanyTokenHandler | transferFrom             | 3045  | 0       | 0        |\n╰---------------------+--------------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 1\n  Bound result 2\n  Bound result 10439\n  Bound result 2\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640364039457584007913129639939\n  Bound result 3\n  Bound result 2\n  Bound result 0\n  Bound result 0\n  Bound result 3\n  Bound result 0\n  Bound result 4\n  Bound result 0\n  Bound result 0\n  Bound result 3\n  Bound result 2\n  Bound result 4\n  Bound result 0\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640364039457584007913129650987\n  Bound result 2\n  Bound result 1\n  Bound result 4\n  Bound result 2\n  Bound result 0\n  Bound result 3\n  Bound result 4\n  Bound result 3\n  Bound result 115792089237316195423570985008687907853269984665640364039462584007913129639935\n  Bound result 2\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 3\n  Bound result 115792089237316195423570985008687907853269984665640364039457584007913129640867\n  Bound result 0\n  Bound result 2\n  Bound result 1\n  Bound result 3\n  Bound result 115792089237316195423570985008687907853269984665640364039457584007913129647647\n  Bound result 2\n  Bound result 1\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 115792089237316195423570985008687907853269984665640364039457584007913129649457\n  Bound result 2\n  Bound result 0\n  Bound result 4\n  Bound result 4\n  Bound result 4\n  Bound result 0\n  Bound result 410\n  Bound result 0\n  Bound result 0\n  Bound result 3\n  Bound result 3\n  Bound result 1\n  Bound result 115792089237316195423570985008687907853269984665640364039457584007913129647472\n  Bound result 4\n  Bound result 2\n  Bound result 0\n  Bound result 0\n  Bound result 4\n  Bound result 1\n  Bound result 4\n  Bound result 1\n  Bound result 0\n  Bound result 6191543\n  Bound result 2\n  Bound result 0\n  Bound result 3\n  Bound result 1\n  Bound result 0\n  Bound result 4\n  Bound result 4\n  Bound result 0\n  Bound result 0\n  Bound result 1\n  Bound result 3\n  Bound result 1\n  Bound result 0\n  Bound result 3\n  Bound result 3\n  Bound result 0\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 2\n  Bound result 0\n  Bound result 6\n  Bound result 3\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640364039457584007913129644831\n  Bound result 4\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640364039457584007914129639934\n  Bound result 4\n  Bound result 1\n  Bound result 2\n  Bound result 2\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 3\n  Bound result 0\n  Bound result 2\n  Bound result 0\n  Bound result 0\n  Bound result 3\n  Bound result 0\n  Bound result 24576\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 2\n  Bound result 0\n  Bound result 1\n  Bound result 192079239018091233249604175\n  Bound result 4\n  Bound result 2\n  Bound result 4\n  Bound result 2272174088090831940369581839322517080545605763033640942979879466174\n  Bound result 2\n  Bound result 1\n  Bound result 0\n  Bound result 3\n  Bound result 4\n  Bound result 0\n  Bound result 3\n  Bound result 29476786\n  Bound result 0\n  Bound result 2\n  Bound result 115792089237316195423570985008687907853269984665640364039462584007913129639936\n  Bound result 3\n  Bound result 1\n  Bound result 4\n  Bound result 0\n  Bound result 0\n  Bound result 1\n  Bound result 3\n  Bound result 4\n  Bound result 1\n  Bound result 154856651245825010877365178848029432\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 4\n  Bound result 4\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639934\n  Bound result 0\n  Bound result 0\n  Bound result 4\n  Bound result 668963405913096372747826175\n  Bound result 4\n  Bound result 0\n  Bound result 1\n  Bound result 18\n  Bound result 3\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640164039457584007913129639943\n  Bound result 4\n  Bound result 0\n  Bound result 2\n  Bound result 2\n  Bound result 4\n  Bound result 127\n  Bound result 2\n  Bound result 115792089237316195423570985008687907853269984665640364039457584007913129643897\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 4\n  Bound result 22446577802265662\n  Bound result 2\n  Bound result 0\n  Bound result 2\n  Bound result 3\n  Bound result 4\n  Bound result 1\n  Bound result 3\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640164039857584007913129639935\n  Bound result 0\n  Bound result 2\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 2\n  Bound result 2\n  Bound result 3\n  Bound result 3\n  Bound result 2\n  Bound result 4\n  Bound result 115792089237316195423570985008687907853269984665640364039457584007913129640159\n  Bound result 0\n  Bound result 4\n  Bound result 0\n  Bound result 138463463374389651053382143\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640164039457584007913129650237\n  Bound result 3\n  Bound result 2\n  Bound result 3\n  Bound result 1000000000\n  Bound result 0\n  Bound result 3\n  Bound result 3\n  Bound result 2\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 1\n  Bound result 4\n  Bound result 1\n  Bound result 0\n  Bound result 3\n  Bound result 1\n  Bound result 3\n  Bound result 2\n  Bound result 115792089237316195423570985008687907853269984665640364039467584007913129640065\n  Bound result 0\n  Bound result 4\n  Bound result 0\n  Bound result 0\n  Bound result 2\n  Bound result 3\n  Bound result 3\n  Bound result 3\n  Bound result 115792089237316195423570985008687907853269984665640364039457584007913129650605\n  Bound result 0\n  Bound result 4\n  Bound result 4\n  Bound result 0\n  Bound result 3\n  Bound result 1406989593172004018876582381543605950596802970718\n  Bound result 1\n  Bound result 4\n  Bound result 1\n  Bound result 0\n  Bound result 24576\n  Bound result 1\n  Bound result 1\n  Bound result 4\n  Bound result 1\n  Bound result 1\n  Bound result 0\n  Bound result 2\n  Bound result 1\n  Bound result 0\n  Bound result 74546208938210525705089673359470378067223510364437886985805968445431653072364\n  Bound result 0\n  Bound result 4\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 3\n  Bound result 115792089237316195423570985008687907853269984665640368378304584727894438088423\n  Bound result 4\n  Bound result 1\n  Bound result 1\n  Bound result 123\n  Bound result 1\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640164043233417217524072258106\n  Bound result 2\n  Bound result 2\n  Bound result 2\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640164039462584007913129639934\n  Bound result 1\n  Bound result 4\n  Bound result 1\n  Bound result 3\n  Bound result 0\n  Bound result 4238\n  Bound result 2\n  Bound result 1\n  Bound result 3\n  Bound result 4\n  Bound result 4\n  Bound result 2\n  Bound result 0\n  Bound result 3\n  Bound result 2\n  Bound result 2\n  Bound result 3\n  Bound result 2\n  Bound result 0\n  Bound result 4\n  Bound result 1\n  Bound result 2\n  Bound result 4\n  Bound result 1\n  Bound result 1\n  Bound result 1\n  Bound result 0\n  Bound result 2\n  Bound result 4\n  Bound result 2\n  Bound result 1\n  Bound result 4\n  Bound result 1\n  Bound result 0\n  Bound result 0\n  Bound result 2\n  Bound result 3\n  Bound result 1\n  Bound result 4\n  Bound result 1564\n  Bound result 3\n  Bound result 0\n  Bound result 1670\n  Bound result 3\n  Bound result 0\n  Bound result 2\n  Bound result 3\n  Bound result 0\n  Bound result 1\n  Bound result 2\n  Bound result 2\n  Bound result 3\n  Bound result 1\n  Bound result 935868069608268188150448772\n  Bound result 2\n  Bound result 0\n  Bound result 2\n  Bound result 2\n  Bound result 89295792944781416493116959\n  Bound result 2\n  Bound result 1\n  Bound result 3\n  Bound result 4\n  Bound result 4\n  Bound result 4355\n  Bound result 1\n\n[PASS] test_handlerExercisesPositiveSpendingRevocationAndRollback() (gas: 2491655)\nLogs:\n  Bound result 0\n  Bound result 1\n  Bound result 1\n  Bound result 2\n  Bound result 1\n  Bound result 2\n  Bound result 3\n  Bound result 1\n  Bound result 2\n  Bound result 1\n  Bound result 2\n  Bound result 3\n  Bound result 3\n  Bound result 4\n  Bound result 0\n  Bound result 3\n  Bound result 4\n  Bound result 0\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639935\n  Bound result 1\n  Bound result 1\n  Bound result 2\n  Bound result 0\n  Bound result 3\n  Bound result 1\n  Bound result 2\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639934\n  Bound result 3\n  Bound result 1\n  Bound result 2\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639935\n  Bound result 3\n  Bound result 1\n  Bound result 2\n  Bound result 1\n  Bound result 2\n  Bound result 1\n  Bound result 0\n  Bound result 1\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 33.04s (33.04s CPU time)\n\nRan 4 test suites in 33.04s (33.43s CPU time): 54 tests passed, 0 failed, 0 skipped (54 total tests)\n","passed":true},{"durationMs":67,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"CompanyToken.approve(address,uint256)\",\"CompanyToken.transfer(address,uint256)\",\"CompanyToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"README.md\":150,\"foundry.toml\":21,\"remappings.txt\":2,\"script/DeployCompanyToken.s.sol\":24,\"src/CompanyToken.sol\":33,\"test/CompanyToken.t.sol\":395,\"test/CompanyTokenBoundary.t.sol\":336,\"test/CompanyTokenInvariant.t.sol\":118,\"test/DeployCompanyToken.t.sol\":29,\"test/handlers/CompanyTokenHandler.sol\":210},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"f9b201a64ee78b3463e4e42ba56acfaa6b4f4d893fe8e63158e38764c745fce7","verifiedTreeHash":"0424555da66e56f4c7b51d40b2ae359623b401b3","verifierVersion":"0.1.0+aca6c688"}]}