{"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":"8a5d5e50-f972-4a86-ab69-1442ed0cc957","kind":"skill:build-contract-project","nodes":[{"acceptedSubmissionHash":"dc4b83dc4e24789f783451c91a3f3ae907d499c78e6c0005b361399920adc798","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"b6503de65ad02f845827887c23da4c3b56ccc5df7a459db263bae6e549d92f7f","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"b6503de65ad02f845827887c23da4c3b56ccc5df7a459db263bae6e549d92f7f","skillId":"build-contract-project","state":"accepted"}],"objective":"Repair launch 816 for `https://github.com/identity-md-launches/launch-816-imd-index`.\n\nThe build was accepted, but Ethereum launch simulation is parked with:\n\n`DeploymentFailed(uint256 index) (6)`\n\nIndex 6 appears to be the seventh application contract, `FeeHookDeployer`.\n\nDiagnose the exact revert and fix the launch-specific deployment issue. First investigate whether `FeeHookDeployer`’s constructor calls to `FeeWaterfall.reserveAsset()` and `.weth()` are incompatible with the launch factory, or whether constructor arguments are resolving incorrectly.\n\nPreserve the existing security model. Do not remove meaningful validation or introduce privileged shortcuts.\n\nAcceptance:\n- launch simulation succeeds;\n- all seven application contracts deploy;\n- constructor arguments and contract references resolve correctly;\n- no roles are assigned automatically;\n- verifier/tests remain green;\n- deliver the repaired commit and explain the root cause and fix.","parentJobId":"6321056b-a125-48f2-9c7a-81cc8695a1f2","planHash":"3532f7b694086da27485441335a0dd6ac7c11ebcfc3994778b4983a3a402976f","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"6321056b-a125-48f2-9c7a-81cc8695a1f2","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-816-imd-index"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51746","feedbackHash":"1c72d14cb7ffa849c74df336a406a2ae8f788832dfed8c7ea32785b4b43e96b4","nodeKey":"build_contract_project","submissionHash":"a28e2ec6288f62ae5fb6a9f579013abaf5f09ce3fc5a71b026ca3d4ed399585e","tag1":"verification:checks","tag2":"acceptance-v2","value":0},{"agentId":"51620","feedbackHash":"b5001526738c3f15338804b79325060955d1f4ea1e96e2485748b687a81ac2a3","nodeKey":"build_contract_project","submissionHash":"dc4b83dc4e24789f783451c91a3f3ae907d499c78e6c0005b361399920adc798","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"392f7920b791e5c36b40d3f2ac11b36e8ca0d6c58dce650b0a07cc638617dd8f","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"b0e69c926ff15c7444fb2e0fd04a4cd53283453350d7d3df945d4752eb1d5a27","device":"1c0fa8d0cf677236","findings":[],"hash":"a28e2ec6288f62ae5fb6a9f579013abaf5f09ce3fc5a71b026ca3d4ed399585e","nodeId":"04a751c6-8235-49b6-9f95-830e94727bc0","outcome":"completed","summary":"Delivered commit `f1721a6` as a [Git bundle](/tmp/launch-816-repair.bundle), leaving repository `.git/` untouched.\n\nThe replay reproduces `DeploymentFailed(6)` as CREATE2 code-deposit gas exhaustion. Both waterfall calls and constructor arguments are valid. Reduced deployment costs bring gas from **20,816,126 to 16,723,731**.\n\nAll seven contracts deploy in the offline factory replay. Validation remains intact; no roles are granted automatically.\n\nChecks pass: **284 tests**, `forge build`, and `forge fmt --check`.\n\n[Diagnosis and operational instructions](docs/LAUNCH-816.md) document the evidence, parameters, and required operator re-attestation and final simulation before resuming launch.","treeHash":"3908d046d95b63a8805d9bbcdb67d5f6ceba59d7","usage":{"cachedInputTokens":15640448,"inputTokens":265449,"model":"gpt-6-astra","outputTokens":78788,"runtime":"codex","turns":12,"wallClockMs":2691646}},{"artifacts":[],"attempt":2,"bundleHash":"075e76647ade8d7a19aea64c1bff46075f305c96f4e2bb76efac040ed3768861","device":"7df8c87bdf5d7822","findings":[],"hash":"dc4b83dc4e24789f783451c91a3f3ae907d499c78e6c0005b361399920adc798","nodeId":"04a751c6-8235-49b6-9f95-830e94727bc0","outcome":"completed","summary":"Repaired commit **`c6a77b2`**: [commit bundle](/tmp/launch816-repair.bundle) · [patch](/tmp/launch816-repair.patch). Protected workspace `.git` remains unchanged.\n\nRoot cause: `FeeHookDeployer` exhausted the launch gas budget during runtime code deposit. Its waterfall getters and constructor arguments were correct.\n\nThe repair reduces deployment bytecode and authenticates later-supplied hook creation code, preserving validation and role restrictions.\n\nVerified with Solidity 0.8.26:\n\n- `forge build`, `forge test`, `forge fmt --check` pass.\n- 280 offline tests and two factory-fork tests pass.\n- All seven applications deploy with roles unset; full fork launch uses **16,759,438 gas**.\n\nGas margin is narrow, so the operator must simulate the exact production payload. [Diagnosis and deployment instructions](/root/.identitymd/work/8a5d5e50-f972-4a86-ab69-1442ed0cc957/04a751c6-8235-49b6-9f95-830e94727bc0/docs/LAUNCH-816.md).","treeHash":"b8800af76ee7df5b312018e26ee518f44636da27","usage":{"cachedInputTokens":13433472,"inputTokens":309509,"model":"gpt-6-astra","outputTokens":65842,"runtime":"codex","turns":16,"wallClockMs":2196259}}],"verification":[{"checks":[{"durationMs":15861,"exitCode":0,"name":"build","output":"Compiling 124 files with Solc 0.8.26\nSolc 0.8.26 finished in 15.74s\nCompiler run successful!\n","passed":true},{"durationMs":7042,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 23 tests for test/TimelockedAdmin.t.sol:TimelockedAdminTest\n[PASS] test_adminCannotBeHandedToARoleHolder() (gas: 106978)\n[PASS] test_adminHandoverIsTwoStep() (gas: 483912)\n[PASS] test_adminWalletCannotHoldARole() (gas: 105652)\n[PASS] test_configurationCannotBeCalledDirectly() (gas: 168689)\n[PASS] test_constructorValidatesInput() (gas: 3897)\n[PASS] test_executeAtExactlyReadyTimeSucceeds() (gas: 140963)\n[PASS] test_executeBubblesTargetRevertAndKeepsOperation() (gas: 107461)\n[PASS] test_executeRejectsCallDataForCodelessTarget() (gas: 98982)\n[PASS] test_executeRespectsDelayAndGraceBoundaries() (gas: 291612)\n[PASS] test_executorMustBeAContract() (gas: 116653)\n[PASS] test_guardianCanOnlyTighten() (gas: 256933)\n[PASS] test_guardianVetoesScheduledOperation() (gas: 157844)\n[PASS] test_minDelayChangeAppliesToLaterSchedules() (gas: 398614)\n[PASS] test_oneAddressHoldsAtMostOneRole() (gas: 110044)\n[PASS] test_onlyAdminSchedulesAndExecutes() (gas: 124107)\n[PASS] test_onlyGuardianPausesAndStrangerCannotUnpause() (gas: 472150)\n[PASS] test_quorumBounds() (gas: 104597)\n[PASS] test_quorumCannotExceedSigners() (gas: 106729)\n[PASS] test_rolesAreSeparatedAfterConfiguration() (gas: 68190)\n[PASS] test_scheduleRejectsShortLongAndDuplicate() (gas: 159131)\n[PASS] test_signerCannotBecomeGuardian() (gas: 144280)\n[PASS] test_timelockCannotDropSignersBelowQuorum() (gas: 487684)\n[PASS] test_treasuryEthLeavesOnlyThroughADelayedOperation() (gas: 129127)\nSuite result: ok. 23 passed; 0 failed; 0 skipped; finished in 8.24ms (2.45ms CPU time)\n\nRan 26 tests for test/AssetRegistry.t.sol:AssetRegistryTest\n[PASS] testFuzz_convertRoundTripNeverCreatesValue(uint256,uint8,uint8) (runs: 256, μ: 73164, ~: 88032)\n[PASS] test_anyoneCanQuarantineAStaleTokenButNotAFreshOne() (gas: 150940)\n[PASS] test_approveTokenRejectsCodelessFeed() (gas: 764108)\n[PASS] test_approveTokenRejectsCodelessTokenAndFeed() (gas: 121642)\n[PASS] test_approveTokenRejectsReserveAsset() (gas: 121550)\n[PASS] test_approveTokenRejectsZeroCapAndFutureListing() (gas: 874614)\n[PASS] test_badFeedAnswersReadAsNoPrice() (gas: 374779)\n[PASS] test_configuredParametersRetainTheirFullRange() (gas: 456372)\n[PASS] test_convertFailsWhenReserveFeedIsStale() (gas: 73074)\n[PASS] test_convertHandlesDifferentDecimals() (gas: 182551)\n[PASS] test_defaultParametersMatchTheDocumentedStartingValues() (gas: 176753)\n[PASS] test_everySetterIsTimelockOnly() (gas: 193275)\n[PASS] test_explicitZeroOverridesThePackedDefault() (gas: 847157)\n[PASS] test_freshPriceIsNormalisedTo18Decimals() (gas: 25844)\n[PASS] test_listedTokensAndAssetRecordArePublished() (gas: 41440)\n[PASS] test_methodologyVersionOnlyMovesForward() (gas: 517985)\n[PASS] test_minimumTokenAgeCannotGoBelowThirtyDays() (gas: 111768)\n[PASS] test_onlyGuardianExecutorOrTimelockQuarantine() (gas: 596367)\n[PASS] test_paramsStayInsideHardBounds() (gas: 494246)\n[PASS] test_priceIsValidAtHeartbeatAndStaleOneSecondLater() (gas: 57567)\n[PASS] test_revertingOrMalformedFeedDoesNotRevertTheReader() (gas: 184657)\n[PASS] test_revokedTokenIsNotEligibleButStillPriced() (gas: 406155)\n[PASS] test_routerAllowlist() (gas: 398628)\n[PASS] test_slippageLimitCannotBeSwitchedOff() (gas: 111570)\n[PASS] test_tokenYoungerThanThirtyDaysIsNotEligible() (gas: 1628859)\n[PASS] test_windowCannotExceedInterval() (gas: 114661)\nSuite result: ok. 26 passed; 0 failed; 0 skipped; finished in 34.62ms (31.52ms CPU time)\n\nRan 14 tests for test/FeeWaterfall.t.sol:FeeWaterfallTest\n[PASS] testFuzz_distributionConservesEveryUnit(uint256,uint256,uint16,uint16) (runs: 256, μ: 431774, ~: 436873)\n[PASS] test_basketReserveIsDepositedAtNavForTheTreasury() (gas: 864386)\n[PASS] test_basketReserveKeepsAccumulatingWhileTheVaultIsClosed() (gas: 957321)\n[PASS] test_claimPaysOnlyTheConfiguredRecipient() (gas: 1346257)\n[PASS] test_configurationIsTimelockOnly() (gas: 110949)\n[PASS] test_distributeSplitsTheNonLpSeventyFivePercent() (gas: 398682)\n[PASS] test_pushHonoursMinShares() (gas: 438669)\n[PASS] test_rescueCannotTouchFeeAssets() (gas: 943524)\n[PASS] test_roundingDustGoesToTheBasketReserve() (gas: 248569)\n[PASS] test_splitChangeOnlyAffectsLaterFees() (gas: 797651)\n[PASS] test_splitMustSumToOneHundredPercent() (gas: 87545)\n[PASS] test_staleBasketSurchargeIsAppliedOnlyWhileStale() (gas: 1542047)\n[PASS] test_startingSplitAndFeeAreVisibleOnChain() (gas: 56045)\n[PASS] test_swapFeeIsBoundedAtThreePercentIncludingSurcharge() (gas: 104728)\nSuite result: ok. 14 passed; 0 failed; 0 skipped; finished in 66.89ms (57.64ms CPU time)\n\nRan 41 tests for test/EpochManager.t.sol:EpochManagerTest\n[PASS] test_activatedProposalCannotBeReplayed() (gas: 1253018)\n[PASS] test_activationFailsOnceExpiredButSucceedsAtTheExpirySecond() (gas: 1428403)\n[PASS] test_basketGoesStaleWithoutSwarmActivityAndAReportRefreshesIt() (gas: 1866072)\n[PASS] test_basketMayHoldFewerThanFiveAndLeaveTheRestInReserve() (gas: 986646)\n[PASS] test_cancelledProposalCannotBeReplayed() (gas: 815368)\n[PASS] test_digestMatchesIndependentEip712Computation() (gas: 67668)\n[PASS] test_fixedDomainMetadataTracksTheChainAndVerifyingContract() (gas: 34909)\n[PASS] test_onlyOnePendingProposalUntilItExpires() (gas: 1359140)\n[PASS] test_pauseBlocksPublishAndActivate() (gas: 977368)\n[PASS] test_proposalSignedForAnOlderSignerSetIsRejected() (gas: 204737)\n[PASS] test_publishThenActivateAfterDelay() (gas: 1267970)\n[PASS] test_rejectsAProposalChangedAfterSigning() (gas: 298679)\n[PASS] test_rejectsASignatureFromANonSigner() (gas: 297242)\n[PASS] test_rejectsAttestedMarketDataBelowTheMinimums() (gas: 1246888)\n[PASS] test_rejectsBelowQuorum() (gas: 284935)\n[PASS] test_rejectsExpiredProposal() (gas: 154337)\n[PASS] test_rejectsExpiryThatCannotOutliveTheDelay() (gas: 708014)\n[PASS] test_rejectsExpiryTooFarAhead() (gas: 154953)\n[PASS] test_rejectsMalformedAndMalleableSignatures() (gas: 531712)\n[PASS] test_rejectsMismatchedArrays() (gas: 484166)\n[PASS] test_rejectsMoreThanFiveAssets() (gas: 168275)\n[PASS] test_rejectsQuarantinedToken() (gas: 251942)\n[PASS] test_rejectsStaleAndFutureSnapshots() (gas: 825778)\n[PASS] test_rejectsTheSameSignerTwice() (gas: 298715)\n[PASS] test_rejectsTokenThatIsNotAllowlisted() (gas: 866407)\n[PASS] test_rejectsTokenWithStalePrice() (gas: 295048)\n[PASS] test_rejectsTokenYoungerThanThirtyDays() (gas: 1706587)\n[PASS] test_rejectsTotalWeightAbove100Percent() (gas: 1161788)\n[PASS] test_rejectsWeightAboveTheTokenCap() (gas: 198700)\n[PASS] test_rejectsWhenNoQuorumIsConfigured() (gas: 377952)\n[PASS] test_rejectsWrongEpoch() (gas: 195357)\n[PASS] test_rejectsWrongMethodologyVersion() (gas: 162037)\n[PASS] test_rejectsZeroWeightAndDuplicates() (gas: 524466)\n[PASS] test_reportAnchorNeedsQuorumAndAFreshNewerSnapshot() (gas: 511782)\n[PASS] test_revokingASignerDuringTheDelayInvalidatesThePendingProposal() (gas: 892958)\n[PASS] test_secondEpochNeedsANewerSnapshot() (gas: 1343593)\n[PASS] test_signatureFromAnotherChainIsRejected() (gas: 299240)\n[PASS] test_staleFeedAtActivationBlocksActivation() (gas: 703331)\n[PASS] test_tokenQuarantinedDuringTheDelayBlocksActivation() (gas: 1001608)\n[PASS] test_turnoverLimitCapsAdditionsPerEpoch() (gas: 2340799)\n[PASS] test_weeklyCadenceBlocksAnEarlySecondEpoch() (gas: 2309987)\nSuite result: ok. 41 passed; 0 failed; 0 skipped; finished in 93.91ms (96.69ms CPU time)\n\nRan 5 tests for test/Launch816.t.sol:Launch816Test\n[PASS] test_acceptedBytecodeReproducesIndex6GasFailureAfterBothWaterfallReads() (gas: 20115314)\nLogs:\n  launch intrinsic gas: 1250852\n\n[PASS] test_launch816CompletesWithinEthereumTransactionLimitAndWiresAllSevenContracts() (gas: 32365745)\nLogs:\n  launch intrinsic gas: 1082088\n\n[PASS] test_nativeQuoteStillRejectsAWaterfallThatDoesNotWrapItsReserve() (gas: 29335374)\nLogs:\n  launch intrinsic gas: 1081848\n\n[PASS] test_originalConstructorArgumentsWorkWithALargerGasBudget() (gas: 39691871)\nLogs:\n  launch intrinsic gas: 1250852\n\n[PASS] test_wrongWaterfallReferenceStillFailsAtIndex6() (gas: 29262975)\nLogs:\n  launch intrinsic gas: 1082088\n\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 102.74ms (188.14ms CPU time)\n\nRan 20 tests for test/FeeHook.t.sol:FeeHookErc20QuoteHighTest\n[PASS] testFuzz_feeAccountingMatchesAcrossSwapShapes(uint256,bool,bool) (runs: 256, μ: 387841, ~: 389419)\n[PASS] test_buyExactInput_feeTakenFromTheQuotePaid() (gas: 376166)\n[PASS] test_buyExactOutput_feeAddedToTheQuotePaid() (gas: 354150)\n[PASS] test_callbacksAreOnlyForThePoolManager() (gas: 114689)\n[PASS] test_creationCodeCommitmentCannotBeChangedByTheCaller() (gas: 25798362)\n[PASS] test_deployerRejectsAQuoteTheWaterfallCannotAccountFor() (gas: 651794)\n[PASS] test_deployerRejectsWrongSaltAndSecondDeployment() (gas: 25762597)\n[PASS] test_dustSwapWithZeroFeeStillWorks() (gas: 242760)\n[PASS] test_feeAndSplitChangesReachTheHookThroughTheTimelockOnly() (gas: 705648)\n[PASS] test_feeEventIsIndexedByPoolSenderAndCurrency() (gas: 367297)\n[PASS] test_feeIsAlwaysCollectedInTheQuoteCurrencyNeverInTheProjectToken() (gas: 1170839)\n[PASS] test_feesFlowFromSwapToWaterfallToVaultWithoutTradingTheBasket() (gas: 1217058)\n[PASS] test_hookAcceptsOnlyItsOnePool() (gas: 810958)\n[PASS] test_hookAddressCarriesExactlyTheRequiredPermissionBits() (gas: 63429)\n[PASS] test_quoteIsCurrencyOne() (gas: 5631)\n[PASS] test_quoteSpecifiedExactInputExhaustedRangeRevertsAtomically() (gas: 748185)\n[PASS] test_quoteSpecifiedExactOutputPartialFillRevertsAtomically() (gas: 301334)\n[PASS] test_sellExactInput_feeTakenFromTheQuoteReceived() (gas: 359586)\n[PASS] test_sellExactOutput_traderStillReceivesTheExactQuote() (gas: 358645)\n[PASS] test_zeroHookFeeLeavesSwapsUntouched() (gas: 436492)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 106.96ms (134.13ms CPU time)\n\nRan 6 tests for test/LaunchToken.t.sol:LaunchTokenTest\n[PASS] testFuzz_transfersConserveSupply(address,uint256) (runs: 256, μ: 85513, ~: 85552)\n[PASS] test_metadataAndFixedSupplyMintedToDeployer() (gas: 51556)\n[PASS] test_noMintOrAdminEntryPointExists() (gas: 144953)\n[PASS] test_transferBeyondBalanceReverts() (gas: 32873)\n[PASS] test_transferFromNeedsAllowance() (gas: 137195)\n[PASS] test_transferMovesExactlyTheAmount() (gas: 74767)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 109.79ms (110.31ms CPU time)\n\nRan 9 tests for test/adversarial/ProposalBoundaries.t.sol:ProposalBoundariesTest\n[PASS] testFuzz_everySignedFieldIsBoundToTheSignature(uint8,uint256) (runs: 1000, μ: 303287, ~: 360971)\n[PASS] test_clearExpiredAfterBoundaryPreservesReplayProtection() (gas: 985180)\n[PASS] test_clearExpiredAtBoundaryCannotEraseAnExecutableProposal() (gas: 1232089)\n[PASS] test_delayedAgeIncreaseIsRecheckedAtActivation() (gas: 1244286)\n[PASS] test_delayedMethodologyChangeInvalidatesPendingProposal() (gas: 1235943)\n[PASS] test_delayedRevocationIsRecheckedAtActivation() (gas: 1222701)\n[PASS] test_delayedWeightCapReductionIsRecheckedAtActivation() (gas: 1281743)\n[PASS] test_failedQuorumDoesNotPoisonARetryWithValidSignatures() (gas: 845689)\n[PASS] test_signatureCannotBeReusedOnAnotherManager() (gas: 334631)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 112.01ms (199.88ms CPU time)\n\nRan 9 tests for test/adversarial/ExternalTokenFailures.t.sol:ExternalTokenFailuresTest\n[PASS] testFuzz_taxedReserveCannotMintSharesForUnreceivedAssets(uint256) (runs: 1000, μ: 1029083, ~: 1030250)\n[PASS] test_failedFeeTransferRollsBackLiabilitiesAndUnlocksClaims() (gas: 1049042)\n[PASS] test_falseReturnStrictRollbackAndNonStrictExit() (gas: 1079108)\n[PASS] test_invalidBooleanStrictRollbackAndNonStrictExit() (gas: 1079453)\n[PASS] test_minShareFailureRollsBackFeeDistributionAndApproval() (gas: 939642)\n[PASS] test_noReturnTokenIsPaidDuringStrictRedemption() (gas: 964171)\n[PASS] test_reserveCallbacksCannotReenterOnDepositOrRedemption() (gas: 1284582)\n[PASS] test_shortReturnStrictRollbackAndNonStrictExit() (gas: 1078908)\n[PASS] test_taxedReserveOneUnitAndMaximumDeposit() (gas: 2003449)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 111.76ms (106.61ms CPU time)\n\nRan 26 tests for test/Revision.t.sol:RevisionTest\n[PASS] test_activationAtSnapshotAgeBoundarySucceeds() (gas: 1204988)\n[PASS] test_activationRechecksSnapshotAgeWithFreshPrices() (gas: 879673)\n[PASS] test_adminCanCancelRecoveryAndGuardianStillVetoesOtherCalls() (gas: 329121)\n[PASS] test_autoQuarantineDoesNotVetoProposalOrCloseFairDeposits() (gas: 4007191)\n[PASS] test_autoQuarantineRetainsDeltaAndWindowUntilGuardianConfirms() (gas: 7111941)\n[PASS] test_deadUntransferablePositionPreservesClaimsAndClosesDeposits() (gas: 5815995)\n[PASS] test_dustDepositCannotLockExistingShares() (gas: 5593866)\n[PASS] test_emptyBasketCannotResetTurnoverHistory() (gas: 1859070)\n[PASS] test_firstDepositChecksRegistryReserveScale() (gas: 165650)\n[PASS] test_firstTradeCannotChooseWindowStart() (gas: 1858997)\n[PASS] test_fullDustExitCanFreeHeldSlot() (gas: 5338204)\n[PASS] test_gasBurningUnquarantinedBalanceFailsWithBoundedError() (gas: 5828311)\n[PASS] test_guardianCannotVetoReplacementOrUnpause() (gas: 881301)\n[PASS] test_heldQuarantineClosesDepositsEvenWithFreshFeed() (gas: 4851606)\n[PASS] test_keeperFailuresCannotCreateExitRightsForAnyMember() (gas: 14377192)\n[PASS] test_lateFirstTradeUsesTheActivationSchedule() (gas: 2589228)\n[PASS] test_newSharesCannotRedeemInTheirDepositBlock() (gas: 5193549)\n[PASS] test_newSharesCannotTransferOrTransferFromToBypassLock() (gas: 4981704)\n[PASS] test_onlyKeeperOrTimelockChoosesTreasuryDepositTime() (gas: 522980)\n[PASS] test_proposalDelayAndSnapshotAgeMustLeaveExecutionTime() (gas: 1374895)\n[PASS] test_proposalDelayCannotConsumeEntireValidityPeriod() (gas: 35120)\n[PASS] test_quarantinedGasBurnerCannotStopUnrelatedTrades() (gas: 5522295)\n[PASS] test_releaseStartsANewFailureStreak() (gas: 6871393)\n[PASS] test_strictUnreadableBalancePreservesSharesAfterHoldingPeriod() (gas: 4719813)\n[PASS] test_unreadableNonStrictRedemptionEmitsUnknownSkippedSlice() (gas: 4762514)\n[PASS] test_untrackedDonationDoesNotBlockMemberPurchase() (gas: 2022345)\nSuite result: ok. 26 passed; 0 failed; 0 skipped; finished in 138.01ms (112.50ms CPU time)\n\nRan 6 tests for test/WordRead.t.sol:WordReadTest\n[PASS] testFuzz_fullWordAndTrailingReturnDataMatchSolidity(uint256,uint256) (runs: 256, μ: 126522, ~: 126984)\n[PASS] testFuzz_narrowWordsRejectDirtyHighBitsLikeSolidity(uint256) (runs: 256, μ: 113617, ~: 114313)\n[PASS] test_dirtyBoolAndAddressRevertLikeSolidity() (gas: 192841)\n[PASS] test_emptyAndShortReturnsRevertButZeroWordIsValid() (gas: 135140)\n[PASS] test_revertDataBubblesUnchangedIncludingBeyondScratchSpace() (gas: 180869)\n[PASS] test_selectorAndSingleWordArgumentAreAbiEncodedExactly() (gas: 93631)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 151.53ms (155.85ms CPU time)\n\nRan 20 tests for test/FeeHook.t.sol:FeeHookNativeEthTest\n[PASS] testFuzz_feeAccountingMatchesAcrossSwapShapes(uint256,bool,bool) (runs: 256, μ: 322006, ~: 316082)\n[PASS] test_buyExactInput_feeTakenFromTheQuotePaid() (gas: 327118)\n[PASS] test_buyExactOutput_feeAddedToTheQuotePaid() (gas: 303597)\n[PASS] test_callbacksAreOnlyForThePoolManager() (gas: 114036)\n[PASS] test_creationCodeCommitmentCannotBeChangedByTheCaller() (gas: 166046865)\n[PASS] test_deployerRejectsAQuoteTheWaterfallCannotAccountFor() (gas: 651861)\n[PASS] test_deployerRejectsWrongSaltAndSecondDeployment() (gas: 166011384)\n[PASS] test_dustSwapWithZeroFeeStillWorks() (gas: 216282)\n[PASS] test_feeAndSplitChangesReachTheHookThroughTheTimelockOnly() (gas: 664847)\n[PASS] test_feeEventIsIndexedByPoolSenderAndCurrency() (gas: 316195)\n[PASS] test_feeIsAlwaysCollectedInTheQuoteCurrencyNeverInTheProjectToken() (gas: 981659)\n[PASS] test_feesFlowFromSwapToWaterfallToVaultWithoutTradingTheBasket() (gas: 1161074)\n[PASS] test_hookAcceptsOnlyItsOnePool() (gas: 810004)\n[PASS] test_hookAddressCarriesExactlyTheRequiredPermissionBits() (gas: 63397)\n[PASS] test_nativeFeesArriveAsEthAndTheReceiveHookDoesNothing() (gas: 339130)\n[PASS] test_quoteSpecifiedExactInputExhaustedRangeRevertsAtomically() (gas: 640415)\n[PASS] test_quoteSpecifiedExactOutputPartialFillRevertsAtomically() (gas: 244647)\n[PASS] test_sellExactInput_feeTakenFromTheQuoteReceived() (gas: 290324)\n[PASS] test_sellExactOutput_traderStillReceivesTheExactQuote() (gas: 290975)\n[PASS] test_zeroHookFeeLeavesSwapsUntouched() (gas: 411983)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 151.58ms (242.59ms CPU time)\n\nRan 20 tests for test/FeeHook.t.sol:FeeHookErc20QuoteLowTest\n[PASS] testFuzz_feeAccountingMatchesAcrossSwapShapes(uint256,bool,bool) (runs: 256, μ: 387609, ~: 385150)\n[PASS] test_buyExactInput_feeTakenFromTheQuotePaid() (gas: 382354)\n[PASS] test_buyExactOutput_feeAddedToTheQuotePaid() (gas: 359129)\n[PASS] test_callbacksAreOnlyForThePoolManager() (gas: 114108)\n[PASS] test_creationCodeCommitmentCannotBeChangedByTheCaller() (gas: 25892639)\n[PASS] test_deployerRejectsAQuoteTheWaterfallCannotAccountFor() (gas: 651861)\n[PASS] test_deployerRejectsWrongSaltAndSecondDeployment() (gas: 25857110)\n[PASS] test_dustSwapWithZeroFeeStillWorks() (gas: 249287)\n[PASS] test_feeAndSplitChangesReachTheHookThroughTheTimelockOnly() (gas: 710599)\n[PASS] test_feeEventIsIndexedByPoolSenderAndCurrency() (gas: 373485)\n[PASS] test_feeIsAlwaysCollectedInTheQuoteCurrencyNeverInTheProjectToken() (gas: 1170314)\n[PASS] test_feesFlowFromSwapToWaterfallToVaultWithoutTradingTheBasket() (gas: 1216227)\n[PASS] test_hookAcceptsOnlyItsOnePool() (gas: 810088)\n[PASS] test_hookAddressCarriesExactlyTheRequiredPermissionBits() (gas: 63419)\n[PASS] test_quoteIsCurrencyZero() (gas: 5603)\n[PASS] test_quoteSpecifiedExactInputExhaustedRangeRevertsAtomically() (gas: 754747)\n[PASS] test_quoteSpecifiedExactOutputPartialFillRevertsAtomically() (gas: 295053)\n[PASS] test_sellExactInput_feeTakenFromTheQuoteReceived() (gas: 352896)\n[PASS] test_sellExactOutput_traderStillReceivesTheExactQuote() (gas: 353252)\n[PASS] test_zeroHookFeeLeavesSwapsUntouched() (gas: 441451)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 151.56ms (134.24ms CPU time)\n\nRan 5 tests for test/Deployment.t.sol:DeploymentTest\n[PASS] test_constructorsLeaveTheLaunchSupplyWithItsHolder() (gas: 26011045)\n[PASS] test_constructorsNeedNoExternalContractAndWireInDependencyOrder() (gas: 26082104)\n[PASS] test_constructorsRejectZeroAddresses() (gas: 4047)\n[PASS] test_launchGrantsNoRoleToAnyoneAndNothingToTheDeployer() (gas: 26134412)\n[PASS] test_runtimeFitsEip170AndContainsNoDelegatecallCallcodeOrSelfdestruct() (gas: 48058299)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 339.98ms (45.51ms CPU time)\n\nRan 29 tests for test/RebalanceExecutor.t.sol:RebalanceExecutorTest\n[PASS] testFuzz_sandwichedFillNeverCostsMoreThanTheSlippageLimit(uint256,uint256) (runs: 256, μ: 486360, ~: 484435)\n[PASS] test_buysTheTopFiveAtTwentyPercentAndKeepsTheBuffer() (gas: 4297831)\n[PASS] test_cannotBuyATokenOutsideTheActiveBasket() (gas: 148077)\n[PASS] test_cannotBuyBeyondTheTargetDelta() (gas: 3415518)\n[PASS] test_cannotSellATokenAtOrBelowTarget() (gas: 3250787)\n[PASS] test_disposalIsOnlyForQuarantinedTokensAndEnforcesItsFloor() (gas: 3211558)\n[PASS] test_dustTradeWithNoEnforceableFloorIsRefused() (gas: 576872)\n[PASS] test_fillAtTheSlippageLimitSucceedsAndResetsTheFailureCount() (gas: 790144)\n[PASS] test_fillBelowTheOracleFloorIsUndoneAndCounted() (gas: 517101)\n[PASS] test_keeperFloorAppliesWhenStricterThanTheOracleFloor() (gas: 428568)\n[PASS] test_noTradingBeforeAnyBasketIsActive() (gas: 96770)\n[PASS] test_oneLegMustBeTheReserve() (gas: 3193583)\n[PASS] test_onlyAllowlistedRoutersAndNeverProjectContracts() (gas: 1177955)\n[PASS] test_onlyKeepersTrade() (gas: 298090)\n[PASS] test_outputIsMeasuredOnTheVaultSoFeeOnTransferTokensFailTheFloor() (gas: 3283984)\n[PASS] test_partialFillReturnsTheUnsoldRemainder() (gas: 369170)\n[PASS] test_pauseStopsTrading() (gas: 135348)\n[PASS] test_quarantinedPositionCanBeExitedAtAnyTime() (gas: 3945855)\n[PASS] test_quarantinedTokenWithDeadFeedIsDisposedThroughTheTimelock() (gas: 3905425)\n[PASS] test_removedMemberIsSoldAndItsReplacementBought() (gas: 5764904)\n[PASS] test_repeatedFailuresQuarantineTheAssetInsteadOfBlockingTheBasket() (gas: 3484988)\n[PASS] test_replacedExecutorLosesAccessToTheVault() (gas: 1077109)\n[PASS] test_reserveBufferCannotBeSpent() (gas: 4029775)\n[PASS] test_routerCannotReenterVaultOrExecutorDuringASwap() (gas: 414821)\n[PASS] test_sellsOnlyTheExcessOverTarget() (gas: 4550497)\n[PASS] test_smallDriftDoesNotTradeButMaterialDriftDoes() (gas: 4577568)\n[PASS] test_staleOracleStopsATradeUntilTheTokenIsQuarantined() (gas: 4161260)\n[PASS] test_swapEntryPointIsNotCallableFromOutside() (gas: 38611)\n[PASS] test_tradesOutsideTheWindowWaitForTheNextInterval() (gas: 5086634)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 362.98ms (463.89ms CPU time)\n\nRan 22 tests for test/IndexVault.t.sol:IndexVaultTest\n[PASS] testFuzz_depositThenRedeemNeverReturnsMore(uint256,uint256) (runs: 256, μ: 6110276, ~: 6118118)\n[PASS] test_depositCapBoundsTheBeta() (gas: 1027884)\n[PASS] test_depositFeeAccruesToExistingHolders() (gas: 959084)\n[PASS] test_depositHonoursMinShares() (gas: 447495)\n[PASS] test_depositIsRefusedWhileAHeldTokenHasNoFreshPrice() (gas: 5220170)\n[PASS] test_depositRejectsZeroAmountAndZeroReceiver() (gas: 189817)\n[PASS] test_depositsStayClosedUntilAGuardianExists() (gas: 26127898)\n[PASS] test_donationInflationDoesNotStealFromTheNextDepositor() (gas: 770769)\n[PASS] test_executorCannotTakeUntrackedTokenOrEndWithoutBegin() (gas: 499705)\n[PASS] test_firstDepositMintsOneShareUnitPerReserveUnit() (gas: 363934)\n[PASS] test_laterDepositorPaysCurrentNav() (gas: 4918352)\n[PASS] test_navAndHoldingsFollowTheBasketAndPrices() (gas: 5112325)\n[PASS] test_onlyTheExecutorContractMovesAssets() (gas: 562398)\n[PASS] test_pauseClosesDepositsButNeverRedemptions() (gas: 567686)\n[PASS] test_redeemPaysProRataInKind() (gas: 5108283)\n[PASS] test_redeemRejectsZeroAndMoreThanBalance() (gas: 410462)\n[PASS] test_redeemWorksWithSwarmKeeperAndOraclesAllOffline() (gas: 5071163)\n[PASS] test_rescueCannotTouchReserveOrBasket() (gas: 5333905)\n[PASS] test_shareTokenMetadata() (gas: 35830)\n[PASS] test_tokenWithBrokenBalanceOfBlocksDepositsNotRedemptions() (gas: 5281798)\n[PASS] test_untransferableTokenCannotTrapHolders() (gas: 4962224)\n[PASS] test_wrongReserveDecimalsAreCaughtOnFirstDeposit() (gas: 158947)\nSuite result: ok. 22 passed; 0 failed; 0 skipped; finished in 400.45ms (434.61ms CPU time)\n\nRan 1 test for test/invariant/Solvency.invariant.t.sol:SolvencyInvariantTest\n[PASS]\nSolvencyInvariantTest invariants:\n[PASS] invariant_executorHoldsNothingBetweenTrades\n[PASS] invariant_feeAccountingConserves\n[PASS] invariant_noPropertyViolatedMidSequence\n[PASS] invariant_vaultIsSolventAndConsistent\n SolvencyInvariantTest invariants (runs: 32, calls: 2048, reverts: 0)\n\n╭----------+-------------------+-------+---------+----------╮\n| Contract | Selector          | Calls | Reverts | Discards |\n+===========================================================+\n| Handler  | claim             | 320   | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | collectFees       | 289   | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | deposit           | 291   | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | movePrice         | 309   | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | pushBasketReserve | 289   | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | rebalance         | 276   | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | redeem            | 274   | 0       | 0        |\n╰----------+-------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.01s (2.00s CPU time)\n\nRan 1 test for test/adversarial/TreasurySequence.invariant.t.sol:TreasurySequenceInvariantTest\n[PASS] invariant_treasuryAndFixedSupplyConserveValue() (runs: 256, calls: 24576, reverts: 0)\n\n╭-------------------------+---------------------+-------+---------+----------╮\n| Contract                | Selector            | Calls | Reverts | Discards |\n+============================================================================+\n| TreasurySequenceHandler | advance             | 3402  | 0       | 0        |\n|-------------------------+---------------------+-------+---------+----------|\n| TreasurySequenceHandler | cancel              | 3497  | 0       | 0        |\n|-------------------------+---------------------+-------+---------+----------|\n| TreasurySequenceHandler | execute             | 3483  | 0       | 0        |\n|-------------------------+---------------------+-------+---------+----------|\n| TreasurySequenceHandler | fund                | 3483  | 0       | 0        |\n|-------------------------+---------------------+-------+---------+----------|\n| TreasurySequenceHandler | moveLaunchTokens    | 3527  | 0       | 0        |\n|-------------------------+---------------------+-------+---------+----------|\n| TreasurySequenceHandler | schedule            | 3640  | 0       | 0        |\n|-------------------------+---------------------+-------+---------+----------|\n| TreasurySequenceHandler | unauthorizedExecute | 3544  | 0       | 0        |\n╰-------------------------+---------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.94s (3.94s CPU time)\n\nRan 1 test for test/adversarial/CustodySequence.invariant.t.sol:CustodySequenceInvariantTest\n[PASS]\nCustodySequenceInvariantTest invariants:\n[PASS] invariant_allSharesAreBackedAndAccountedFor\n[PASS] invariant_everyReserveUnitHasADestination\n CustodySequenceInvariantTest invariants (runs: 256, calls: 24576, reverts: 0)\n\n╭------------------------+----------------+-------+---------+----------╮\n| Contract               | Selector       | Calls | Reverts | Discards |\n+======================================================================+\n| CustodySequenceHandler | changeSplit    | 2111  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | claim          | 2080  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | deposit        | 2018  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | distribute     | 2106  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | donate         | 2065  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | push           | 2065  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | receiveFees    | 1965  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | redeem         | 2082  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | roundTrip      | 2005  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | togglePause    | 2062  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | transferShares | 2003  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | treasuryRedeem | 2014  | 0       | 0        |\n╰------------------------+----------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 6.90s (6.89s CPU time)\n\nRan 19 test suites in 6.90s (15.29s CPU time): 284 tests passed, 0 failed, 0 skipped (284 total tests)\n","passed":true},{"durationMs":95,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"AssetRegistry.approveToken(address,address,uint32,uint16,uint40,bytes32)\",\"AssetRegistry.quarantine(address)\",\"AssetRegistry.quarantineIfStale(address)\",\"AssetRegistry.releaseQuarantine(address)\",\"AssetRegistry.revokeToken(address)\",\"AssetRegistry.setMethodology(uint32,bytes32)\",\"AssetRegistry.setParam(uint8,uint256)\",\"AssetRegistry.setReserveFeed(address,uint32)\",\"AssetRegistry.setRouter(address,bool)\",\"EpochManager.activate()\",\"EpochManager.anchorReport(uint64,bytes32,bytes[])\",\"EpochManager.cancelPending()\",\"EpochManager.clearExpired()\",\"EpochManager.publish((uint64,uint64,uint64,uint32,uint32,bytes32,address[],uint16[],uint256[],uint256[],uint256[]),bytes[])\",\"FeeHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"FeeHook.beforeInitialize(address,(address,address,uint24,int24,address),uint160)\",\"FeeHook.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"FeeHookDeployer.deploy(bytes32,bytes)\",\"FeeWaterfall.claim(uint8)\",\"FeeWaterfall.distribute()\",\"FeeWaterfall.pushBasketReserve(uint256)\",\"FeeWaterfall.receive()\",\"FeeWaterfall.rescue(address,address)\",\"FeeWaterfall.setRecipient(uint8,address)\",\"FeeWaterfall.setSplit(uint16,uint16,uint16,uint16,uint16)\",\"FeeWaterfall.setSwapFee(uint24,uint24)\",\"IndexVault.approve(address,uint256)\",\"IndexVault.beginTrade(address,uint256)\",\"IndexVault.deposit(uint256,address,uint256)\",\"IndexVault.endTrade(address)\",\"IndexVault.redeem(uint256,address,bool)\",\"IndexVault.rescue(address,address)\",\"IndexVault.setDepositCap(uint256)\",\"IndexVault.transfer(address,uint256)\",\"IndexVault.transferFrom(address,address,uint256)\",\"LaunchToken.approve(address,uint256)\",\"LaunchToken.transfer(address,uint256)\",\"LaunchToken.transferFrom(address,address,uint256)\",\"RebalanceExecutor.disposeQuarantined(address,uint256,uint256,address,bytes)\",\"RebalanceExecutor.executeTrade(address,address,uint256,uint256,address,bytes)\",\"RebalanceExecutor.swapThroughRouter(address,address,uint256,uint256,address,bytes)\",\"TimelockedAdmin.acceptAdmin()\",\"TimelockedAdmin.cancel(bytes32)\",\"TimelockedAdmin.execute(address,uint256,bytes,bytes32)\",\"TimelockedAdmin.pause()\",\"TimelockedAdmin.receive()\",\"TimelockedAdmin.revokeKeeper(address)\",\"TimelockedAdmin.revokeSigner(address)\",\"TimelockedAdmin.schedule(address,uint256,bytes,bytes32,uint256)\",\"TimelockedAdmin.setExecutor(address)\",\"TimelockedAdmin.setGuardian(address)\",\"TimelockedAdmin.setKeeper(address,bool)\",\"TimelockedAdmin.setMinDelay(uint256)\",\"TimelockedAdmin.setQuorum(uint32)\",\"TimelockedAdmin.setSigner(address,bool)\",\"TimelockedAdmin.transferAdmin(address)\",\"TimelockedAdmin.unpause()\"],\"files\":{\".gitignore\":3,\"README.md\":294,\"docs/LAUNCH-816.md\":127,\"docs/METHODOLOGY.md\":139,\"docs/PROPOSAL.md\":99,\"docs/SECURITY.md\":97,\"foundry.toml\":34,\"launch.json\":71,\"script/Deploy.s.sol\":65,\"script/check_launch_manifest.py\":55,\"src/AssetRegistry.sol\":357,\"src/EpochManager.sol\":458,\"src/FeeHook.sol\":258,\"src/FeeHookDeployer.sol\":102,\"src/FeeWaterfall.sol\":265,\"src/IndexVault.sol\":430,\"src/LaunchToken.sol\":16,\"src/RebalanceExecutor.sol\":427,\"src/TimelockedAdmin.sol\":271,\"src/interfaces/IIndex.sol\":91,\"src/libraries/WordRead.sol\":25,\"test/AssetRegistry.t.sol\":315,\"test/Deployment.t.sol\":139,\"test/EpochManager.t.sol\":584,\"test/FeeHook.t.sol\":461,\"test/FeeWaterfall.t.sol\":239,\"test/IndexVault.t.sol\":366,\"test/Launch816.t.sol\":296,\"test/LaunchToken.t.sol\":69,\"test/RebalanceExecutor.t.sol\":488,\"test/Revision.t.sol\":426,\"test/TimelockedAdmin.t.sol\":272,\"test/WordRead.t.sol\":124,\"test/adversarial/CustodySequence.invariant.t.sol\":315,\"test/adversarial/ExternalTokenFailures.t.sol\":212,\"test/adversarial/ProposalBoundaries.t.sol\":129,\"test/adversarial/README.md\":42,\"test/adversarial/TreasurySequence.invariant.t.sol\":224,\"test/fixtures/Launch816Manifest.sol\":48,\"test/fixtures/Launch816Original.sol\":31,\"test/fixtures/Launch816State.sol\":54,\"test/invariant/Handler.sol\":165,\"test/invariant/Solvency.invariant.t.sol\":95,\"test/utils/Fixture.sol\":282,\"test/utils/Mocks.sol\":180,\"test/utils/V4Router.sol\":78},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":4238,"exitCode":0,"name":"slither","output":"[high/high] encode-packed-collision at src/FeeHookDeployer.sol:63: FeeHookDeployer.deploy(bytes32,bytes) (src/FeeHookDeployer.sol#63-79) calls abi.encodePacked() with multiple dynamic arguments:\n[high/medium] reentrancy-eth at src/FeeWaterfall.sol:152: Reentrancy in FeeWaterfall.setSplit(uint16,uint16,uint16,uint16,uint16) (src/FeeWaterfall.sol#152-162):\n[high/medium] reentrancy-eth at src/FeeWaterfall.sol:111: Reentrancy in FeeWaterfall.claim(FeeWaterfall.Bucket) (src/FeeWaterfall.sol#111-122):\n[high/medium] reentrancy-eth at src/FeeWaterfall.sol:127: Reentrancy in FeeWaterfall.pushBasketReserve(uint256) (src/FeeWaterfall.sol#127-148):\n[medium/medium] divide-before-multiply at src/FeeHook.sol:239: FeeHook._collect(address,uint256,FeeHook.FeeQuote,bool) (src/FeeHook.sol#239-252) performs a multiplication on the result of a division:\n[medium/medium] divide-before-multiply at src/RebalanceExecutor.sol:338: RebalanceExecutor._target(address,uint256) (src/RebalanceExecutor.sol#338-342) performs a multiplication on the result of a division:\n[medium/medium] divide-before-multiply at src/RebalanceExecutor.sol:307: RebalanceExecutor._requireWindow() (src/RebalanceExecutor.sol#307-321) performs a multiplication on the result of a division:\n[medium/high] incorrect-equality at src/EpochManager.sol:329: EpochManager.basketStale() (src/EpochManager.sol#329-333) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/TimelockedAdmin.sol:153: TimelockedAdmin.cancel(bytes32) (src/TimelockedAdmin.sol#153-160) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/IndexVault.sol:360: IndexVault._update(address,address,uint256) (src/IndexVault.sol#360-366) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/EpochManager.sol:232: EpochManager.cancelPending() (src/EpochManager.sol#232-245) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/EpochManager.sol:248: EpochManager.clearExpired() (src/EpochManager.sol#248-252) uses a dangerous strict equality:\n[medium/medium] reentrancy-no-eth at src/RebalanceExecutor.sol:108: Reentrancy in RebalanceExecutor.executeTrade(address,address,uint256,uint256,address,bytes) (src/RebalanceExecutor.sol#108-160):\n[medium/medium] uninitialized-local at src/RebalanceExecutor.sol:254: RebalanceExecutor._authorize(address,address,uint256).exit (src/RebalanceExecutor.sol#254) is a local variable never initialized\n[medium/medium] uninitialized-local at src/EpochManager.sol:361: EpochManager._checkBasket(EpochManager.Proposal).total (src/EpochManager.sol#361) is a local variable never initialized\n[medium/medium] uninitialized-local at src/FeeWaterfall.sol:243: FeeWaterfall._distribute().protocol (src/FeeWaterfall.sol#243) is a local variable never initialized\n[medium/medium] uninitialized-local at src/EpochManager.sol:362: EpochManager._checkBasket(EpochManager.Proposal).additions (src/EpochManager.sol#362) is a local variable never initialized\n[medium/medium] uninitialized-local at src/EpochManager.sol:400: EpochManager._checkQuorum(bytes32,bytes[]).last (src/EpochManager.sol#400) is a local variable never initialized\n[medium/medium] uninitialized-local at src/RebalanceExecutor.sol:362: RebalanceExecutor._nav().value (src/RebalanceExecutor.sol#362) is a local variable never initialized\n[medium/medium] uninitialized-local at src/FeeWaterfall.sol:242: FeeWaterfall._distribute().swarm (src/FeeWaterfall.sol#242) is a local variable never initialized\n[medium/medium] uninitialized-local at src/IndexVault.sol:383: IndexVault._nav().tokenValue (src/IndexVault.sol#383) is a local variable never initialized\n[medium/medium] uninitialized-local at src/FeeWaterfall.sol:244: FeeWaterfall._distribute().utility (src/FeeWaterfall.sol#244) is a local variable never initialized\n[low/medium] events-access at src/TimelockedAdmin.sol:188: TimelockedAdmin.setGuardian(address) (src/TimelockedAdmin.sol#188-193) should emit an event for: \n[low/medium] missing-zero-check at src/AssetRegistry.sol:149: AssetRegistry.setReserveFeed(address,uint32).feed (src/AssetRegistry.sol#149) lacks a zero-check on :\n[low/medium] missing-zero-check at src/FeeWaterfall.sol:90: FeeWaterfall.constructor(address,address,address,address).weth_ (src/FeeWaterfall.sol#90) lacks a zero-check on :\n[low/medium] calls-loop at src/IndexVault.sol:423: IndexVault._convert(address,uint256,address) (src/IndexVault.sol#423-425) has external calls inside a loop: registry.convert(from,amount,to) (src/IndexVault.sol#424)\n[low/medium] calls-loop at src/IndexVault.sol:392: IndexVault._balanceOf(address) (src/IndexVault.sol#392-396) has external calls inside a loop: (ok,ret) = token.staticcall{gas: TRANSFER_GAS}(abi.encodeCall(IERC20.balanceOf,(address(this)))) (src/IndexVault.sol#393-394)\n[low/medium] calls-loop at src/IndexVault.sol:392: IndexVault._balanceOf(address) (src/IndexVault.sol#392-396) has external calls inside a loop: (ok,ret) = token.staticcall{gas: TRANSFER_GAS}(abi.encodeCall(IERC20.balanceOf,(address(this)))) (src/IndexVault.sol#393-394)\n[low/medium] calls-loop at src/RebalanceExecutor.sol:353: RebalanceExecutor._nav() (src/RebalanceExecutor.sol#353-373) has external calls inside a loop: (ok,ret) = held[i].staticcall{gas: BALANCE_GAS}(abi.encodeCall(IERC20.balanceOf,(address(vault)))) (src/RebalanceExecutor.sol#360-361)\n[low/medium] calls-loop at src/IndexVault.sol:423: IndexVault._convert(address,uint256,address) (src/IndexVault.sol#423-425) has external calls inside a loop: registry.convert(from,amount,to) (src/IndexVault.sol#424)\n[low/medium] calls-loop at src/IndexVault.sol:423: IndexVault._convert(address,uint256,address) (src/IndexVault.sol#423-425) has external calls inside a loop: registry.convert(from,amount,to) (src/IndexVault.sol#424)\n[low/medium] calls-loop at src/IndexVault.sol:392: IndexVault._balanceOf(address) (src/IndexVault.sol#392-396) has external calls inside a loop: (ok,ret) = token.staticcall{gas: TRANSFER_GAS}(abi.encodeCall(IERC20.balanceOf,(address(this)))) (src/IndexVault.sol#393-394)\n[low/medium] calls-loop at src/IndexVault.sol:423: IndexVault._convert(address,uint256,address) (src/IndexVault.sol#423-425) has external calls inside a loop: registry.convert(from,amount,to) (src/IndexVault.sol#424)\n[low/medium] calls-loop at src/IndexVault.sol:392: IndexVault._balanceOf(address) (src/IndexVault.sol#392-396) has external calls inside a loop: (ok,ret) = token.staticcall{gas: TRANSFER_GAS}(abi.encodeCall(IERC20.balanceOf,(address(this)))) (src/IndexVault.sol#393-394)\n[low/medium] calls-loop at src/IndexVault.sol:398: IndexVault._tryTransfer(address,address,uint256) (src/IndexVault.sol#398-403) has external calls inside a loop: (ok,ret) = token.call{gas: TRANSFER_GAS}(abi.encodeCall(IERC20.transfer,(to,amount))) (src/IndexVault.sol#399)\n[low/medium] calls-loop at src/RebalanceExecutor.sol:402: RebalanceExecutor._convert(address,uint256,address) (src/RebalanceExecutor.sol#402-404) has external calls inside a loop: registry.convert(from,amount,to) (src/RebalanceExecutor.sol#403)\n[low/medium] calls-loop at src/RebalanceExecutor.sol:402: RebalanceExecutor._convert(address,uint256,address) (src/RebalanceExecutor.sol#402-404) has external calls inside a loop: registry.convert(from,amount,to) (src/RebalanceExecutor.sol#403)\n[low/medium] calls-loop at src/IndexVault.sol:392: IndexVault._balanceOf(address) (src/IndexVault.sol#392-396) has external calls inside a loop: (ok,ret) = token.staticcall{gas: TRANSFER_GAS}(abi.encodeCall(IERC20.balanceOf,(address(this)))) (src/IndexVault.sol#393-394)\n[low/medium] calls-loop at src/IndexVault.sol:392: IndexVault._balanceOf(address) (src/IndexVault.sol#392-396) has external calls inside a loop: (ok,ret) = token.staticcall{gas: TRANSFER_GAS}(abi.encodeCall(IERC20.balanceOf,(address(this)))) (src/IndexVault.sol#393-394)\n[low/medium] calls-loop at src/IndexVault.sol:423: IndexVault._convert(address,uint256,address) (src/IndexVault.sol#423-425) has external calls inside a loop: registry.convert(from,amount,to) (src/IndexVault.sol#424)\n[low/medium] calls-loop at src/IndexVault.sol:392: IndexVault._balanceOf(address) (src/IndexVault.sol#392-396) has external calls inside a loop: (ok,ret) = token.staticcall{gas: TRANSFER_GAS}(abi.encodeCall(IERC20.balanceOf,(address(this)))) (src/IndexVault.sol#393-394)\n[low/medium] calls-loop at src/RebalanceExecutor.sol:353: RebalanceExecutor._nav() (src/RebalanceExecutor.sol#353-373) has external calls inside a loop: (ok,ret) = held[i].staticcall{gas: BALANCE_GAS}(abi.encodeCall(IERC20.balanceOf,(address(vault)))) (src/RebalanceExecutor.sol#360-361)\n[low/medium] calls-loop at src/IndexVault.sol:392: IndexVault._balanceOf(address) (src/IndexVault.sol#392-396) has external calls inside a loop: (ok,ret) = token.staticcall{gas: TRANSFER_GAS}(abi.encodeCall(IERC20.balanceOf,(address(this)))) (src/IndexVault.sol#393-394)\n[low/medium] reentrancy-benign at src/FeeWaterfall.sol:234: Reentrancy in FeeWaterfall._distribute() (src/FeeWaterfall.sol#234-259):\n[low/medium] reentrancy-benign at src/FeeWaterfall.sol:152: Reentrancy in FeeWaterfall.setSplit(uint16,uint16,uint16,uint16,uint16) (src/FeeWaterfall.sol#152-162):\n[low/medium] reentrancy-events at src/FeeWaterfall.sol:234: Reentrancy in FeeWaterfall._distribute() (src/FeeWaterfall.sol#234-259):\n[low/medium] reentrancy-events at src/FeeWaterfall.sol:152: Reentrancy in FeeWaterfall.setSplit(uint16,uint16,uint16,uint16,uint16) (src/FeeWaterfall.sol#152-162):\n[low/medium] reentrancy-events at src/TimelockedAdmin.sol:126: Reentrancy in TimelockedAdmin.execute(address,uint256,bytes,bytes32) (src/TimelockedAdmin.sol#126-149):\n[low/medium] return-bomb at src/RebalanceExecutor.sol:375: RebalanceExecutor._balanceOf(address) (src/RebalanceExecutor.sol#375-380) tries to limit the gas of an external call that controls implicit decoding\n[low/medium] return-bomb at src/IndexVault.sol:392: IndexVault._balanceOf(address) (src/IndexVault.sol#392-396) tries to limit the gas of an external call that controls implicit decoding\n[low/medium] return-bomb at src/RebalanceExecutor.sol:353: RebalanceExecutor._nav() (src/RebalanceExecutor.sol#353-373) tries to limit the gas of an external call that controls implicit decoding\n[low/medium] timestamp at src/AssetRegistry.sol:339: AssetRegistry._feedPrice(address,uint8,uint32) (src/AssetRegistry.sol#339-356) uses timestamp for comparisons\n[low/medium] timestamp at src/EpochManager.sol:329: EpochManager.basketStale() (src/EpochManager.sol#329-333) uses timestamp for comparisons\n[low/medium] timestamp at src/TimelockedAdmin.sol:153: TimelockedAdmin.cancel(bytes32) (src/TimelockedAdmin.sol#153-160) uses timestamp for comparisons\n[low/medium] timestamp at src/TimelockedAdmin.sol:126: TimelockedAdmin.execute(address,uint256,bytes,bytes32) (src/TimelockedAdmin.sol#126-149) uses timestamp for comparisons\n[low/medium] timestamp at src/EpochManager.sol:232: EpochManager.cancelPending() (src/EpochManager.sol#232-245) uses timestamp for comparisons\n[low/medium] timestamp at src/EpochManager.sol:342: EpochManager._checkTiming(EpochManager.Proposal,uint256) (src/EpochManager.sol#342-349) uses timestamp for comparisons\n[low/medium] timestamp at src/EpochManager.sol:158: EpochManager.publish(EpochManager.Proposal,bytes[]) (src/EpochManager.sol#158-191) uses timestamp for comparisons\n[low/medium] timestamp at src/AssetRegistry.sol:272: AssetRegistry.isEligible(address) (src/AssetRegistry.sol#272-278) uses timestamp for comparisons\n[low/medium] timestamp at src/EpochManager.sol:319: EpochManager.targetWeightBps(address) (src/EpochManager.sol#319-325) uses timestamp for comparisons\n[low/medium] timestamp at src/AssetRegistry.sol:102: AssetRegistry.approveToken(address,address,uint32,uint16,uint40,bytes32) (src/AssetRegistry.sol#102-131) uses timestamp for comparisons\n[low/medium] timestamp at src/EpochManager.sol:248: EpochManager.clearExpired() (src/EpochManager.sol#248-252) uses timestamp for comparisons\n[low/medium] timestamp at src/RebalanceExecutor.sol:307: RebalanceExecutor._requireWindow() (src/RebalanceExecutor.sol#307-321) uses timestamp for comparisons\n[low/medium] timestamp at src/EpochManager.sol:197: EpochManager.activate() (src/EpochManager.sol#197-229) uses timestamp for comparisons\n[low/medium] timestamp at src/EpochManager.sol:383: EpochManager._isActiveMember(address) (src/EpochManager.sol#383-389) uses timestamp for comparisons\n[low/medium] timestamp at src/EpochManager.sol:258: EpochManager.anchorReport(uint64,bytes32,bytes[]) (src/EpochManager.sol#258-268) uses timestamp for comparisons","passed":false}],"detail":"static analysis found encode-packed-collision at src/FeeHookDeployer.sol:63: FeeHookDeployer.deploy(bytes32,bytes) (src/FeeHookDeployer.sol#63-79) calls abi.encodePacked() with multiple dynamic arguments:","evaluation":"checks","profile":"foundry","status":"rejected","submissionHash":"a28e2ec6288f62ae5fb6a9f579013abaf5f09ce3fc5a71b026ca3d4ed399585e","verifiedTreeHash":"3908d046d95b63a8805d9bbcdb67d5f6ceba59d7","verifierVersion":"0.1.0+7471272e"},{"checks":[{"durationMs":10511,"exitCode":0,"name":"build","output":"Compiling 122 files with Solc 0.8.26\nSolc 0.8.26 finished in 10.39s\nCompiler run successful!\n","passed":true},{"durationMs":6809,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/fork/Launch816Fork.t.sol:Launch816ForkTest\n[SKIP: skipped] setUp() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 1.48ms (0.00ns CPU time)\n\nRan 23 tests for test/TimelockedAdmin.t.sol:TimelockedAdminTest\n[PASS] test_adminCannotBeHandedToARoleHolder() (gas: 107046)\n[PASS] test_adminHandoverIsTwoStep() (gas: 483977)\n[PASS] test_adminWalletCannotHoldARole() (gas: 105720)\n[PASS] test_configurationCannotBeCalledDirectly() (gas: 168794)\n[PASS] test_constructorValidatesInput() (gas: 3897)\n[PASS] test_executeAtExactlyReadyTimeSucceeds() (gas: 141031)\n[PASS] test_executeBubblesTargetRevertAndKeepsOperation() (gas: 107529)\n[PASS] test_executeRejectsCallDataForCodelessTarget() (gas: 99026)\n[PASS] test_executeRespectsDelayAndGraceBoundaries() (gas: 291764)\n[PASS] test_executorMustBeAContract() (gas: 116721)\n[PASS] test_guardianCanOnlyTighten() (gas: 257058)\n[PASS] test_guardianVetoesScheduledOperation() (gas: 157888)\n[PASS] test_minDelayChangeAppliesToLaterSchedules() (gas: 398687)\n[PASS] test_oneAddressHoldsAtMostOneRole() (gas: 110112)\n[PASS] test_onlyAdminSchedulesAndExecutes() (gas: 124156)\n[PASS] test_onlyGuardianPausesAndStrangerCannotUnpause() (gas: 472243)\n[PASS] test_quorumBounds() (gas: 104665)\n[PASS] test_quorumCannotExceedSigners() (gas: 106797)\n[PASS] test_rolesAreSeparatedAfterConfiguration() (gas: 68190)\n[PASS] test_scheduleRejectsShortLongAndDuplicate() (gas: 159223)\n[PASS] test_signerCannotBecomeGuardian() (gas: 144348)\n[PASS] test_timelockCannotDropSignersBelowQuorum() (gas: 487793)\n[PASS] test_treasuryEthLeavesOnlyThroughADelayedOperation() (gas: 129171)\nSuite result: ok. 23 passed; 0 failed; 0 skipped; finished in 28.20ms (3.41ms CPU time)\n\nRan 4 tests for test/Launch816.t.sol:Launch816Test\n[PASS] test_originalFailsAtSeventhApplicationWithTransactionBudget() (gas: 36752803)\n[PASS] test_originalGettersAndResolvedArgumentsWorkWithEnoughGas() (gas: 17666768)\n[PASS] test_repairedLaunchFitsTransactionBudgetAndGrantsNoRoles() (gas: 32101007)\n[PASS] test_wrongReferenceIsRejectedAndRollsBack() (gas: 14645402)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 64.25ms (91.97ms CPU time)\n\nRan 21 tests for test/FeeHook.t.sol:FeeHookErc20QuoteHighTest\n[PASS] testFuzz_feeAccountingMatchesAcrossSwapShapes(uint256,bool,bool) (runs: 256, μ: 385729, ~: 383629)\n[PASS] test_buyExactInput_feeTakenFromTheQuotePaid() (gas: 374122)\n[PASS] test_buyExactOutput_feeAddedToTheQuotePaid() (gas: 352194)\n[PASS] test_callbacksAreOnlyForThePoolManager() (gas: 114689)\n[PASS] test_create2CollisionCannotMarkHookAsDeployed() (gas: 23612044)\n[PASS] test_deployerAuthenticatesCodeAndAppendsOnlyItsFixedArguments() (gas: 25088335)\n[PASS] test_deployerRejectsAQuoteTheWaterfallCannotAccountFor() (gas: 651861)\n[PASS] test_deployerRejectsWrongSaltAndSecondDeployment() (gas: 25019553)\n[PASS] test_dustSwapWithZeroFeeStillWorks() (gas: 240738)\n[PASS] test_feeAndSplitChangesReachTheHookThroughTheTimelockOnly() (gas: 699072)\n[PASS] test_feeEventIsIndexedByPoolSenderAndCurrency() (gas: 365253)\n[PASS] test_feeIsAlwaysCollectedInTheQuoteCurrencyNeverInTheProjectToken() (gas: 1162729)\n[PASS] test_feesFlowFromSwapToWaterfallToVaultWithoutTradingTheBasket() (gas: 1189571)\n[PASS] test_hookAcceptsOnlyItsOnePool() (gas: 810958)\n[PASS] test_hookAddressCarriesExactlyTheRequiredPermissionBits() (gas: 75234)\n[PASS] test_quoteIsCurrencyOne() (gas: 5631)\n[PASS] test_quoteSpecifiedExactInputExhaustedRangeRevertsAtomically() (gas: 746250)\n[PASS] test_quoteSpecifiedExactOutputPartialFillRevertsAtomically() (gas: 299290)\n[PASS] test_sellExactInput_feeTakenFromTheQuoteReceived() (gas: 357542)\n[PASS] test_sellExactOutput_traderStillReceivesTheExactQuote() (gas: 356623)\n[PASS] test_zeroHookFeeLeavesSwapsUntouched() (gas: 431486)\nSuite result: ok. 21 passed; 0 failed; 0 skipped; finished in 85.43ms (190.87ms CPU time)\n\nRan 6 tests for test/LaunchToken.t.sol:LaunchTokenTest\n[PASS] testFuzz_transfersConserveSupply(address,uint256) (runs: 256, μ: 85101, ~: 85546)\n[PASS] test_metadataAndFixedSupplyMintedToDeployer() (gas: 51556)\n[PASS] test_noMintOrAdminEntryPointExists() (gas: 144953)\n[PASS] test_transferBeyondBalanceReverts() (gas: 32873)\n[PASS] test_transferFromNeedsAllowance() (gas: 137195)\n[PASS] test_transferMovesExactlyTheAmount() (gas: 74767)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 89.81ms (89.84ms CPU time)\n\nRan 7 tests for test/Deployment.t.sol:DeploymentTest\n[PASS] test_constructorsLeaveTheLaunchSupplyWithItsHolder() (gas: 28038608)\n[PASS] test_constructorsNeedNoExternalContractAndWireInDependencyOrder() (gas: 28090754)\n[PASS] test_constructorsRejectZeroAddresses() (gas: 4047)\n[PASS] test_launchGrantsNoRoleToAnyoneAndNothingToTheDeployer() (gas: 28155707)\n[PASS] test_missingWaterfallAndIdenticalCurrenciesStillFailClosed() (gas: 8224)\n[PASS] test_nativeQuoteStillRequiresMatchingWrappedReserve() (gas: 8276)\n[PASS] test_runtimeFitsEip170AndContainsNoDelegatecallCallcodeOrSelfdestruct() (gas: 51161942)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 91.59ms (45.76ms CPU time)\n\nRan 29 tests for test/RebalanceExecutor.t.sol:RebalanceExecutorTest\n[PASS] testFuzz_sandwichedFillNeverCostsMoreThanTheSlippageLimit(uint256,uint256) (runs: 256, μ: 470921, ~: 469595)\n[PASS] test_buysTheTopFiveAtTwentyPercentAndKeepsTheBuffer() (gas: 4134962)\n[PASS] test_cannotBuyATokenOutsideTheActiveBasket() (gas: 138996)\n[PASS] test_cannotBuyBeyondTheTargetDelta() (gas: 3277094)\n[PASS] test_cannotSellATokenAtOrBelowTarget() (gas: 3121706)\n[PASS] test_disposalIsOnlyForQuarantinedTokensAndEnforcesItsFloor() (gas: 3083373)\n[PASS] test_dustTradeWithNoEnforceableFloorIsRefused() (gas: 542515)\n[PASS] test_fillAtTheSlippageLimitSucceedsAndResetsTheFailureCount() (gas: 760413)\n[PASS] test_fillBelowTheOracleFloorIsUndoneAndCounted() (gas: 502157)\n[PASS] test_keeperFloorAppliesWhenStricterThanTheOracleFloor() (gas: 413532)\n[PASS] test_noTradingBeforeAnyBasketIsActive() (gas: 90208)\n[PASS] test_oneLegMustBeTheReserve() (gas: 3055491)\n[PASS] test_onlyAllowlistedRoutersAndNeverProjectContracts() (gas: 1156929)\n[PASS] test_onlyKeepersTrade() (gas: 285430)\n[PASS] test_outputIsMeasuredOnTheVaultSoFeeOnTransferTokensFailTheFloor() (gas: 3250922)\n[PASS] test_partialFillReturnsTheUnsoldRemainder() (gas: 356993)\n[PASS] test_pauseStopsTrading() (gas: 130806)\n[PASS] test_quarantinedPositionCanBeExitedAtAnyTime() (gas: 3799227)\n[PASS] test_quarantinedTokenWithDeadFeedIsDisposedThroughTheTimelock() (gas: 3771767)\n[PASS] test_removedMemberIsSoldAndItsReplacementBought() (gas: 5579511)\n[PASS] test_repeatedFailuresQuarantineTheAssetInsteadOfBlockingTheBasket() (gas: 3337916)\n[PASS] test_replacedExecutorLosesAccessToTheVault() (gas: 1047087)\n[PASS] test_reserveBufferCannotBeSpent() (gas: 3872548)\n[PASS] test_routerCannotReenterVaultOrExecutorDuringASwap() (gas: 402687)\n[PASS] test_sellsOnlyTheExcessOverTarget() (gas: 4377560)\n[PASS] test_smallDriftDoesNotTradeButMaterialDriftDoes() (gas: 4404631)\n[PASS] test_staleOracleStopsATradeUntilTheTokenIsQuarantined() (gas: 4006949)\n[PASS] test_swapEntryPointIsNotCallableFromOutside() (gas: 38611)\n[PASS] test_tradesOutsideTheWindowWaitForTheNextInterval() (gas: 4908965)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 93.43ms (160.25ms CPU time)\n\nRan 9 tests for test/adversarial/ProposalBoundaries.t.sol:ProposalBoundariesTest\n[PASS] testFuzz_everySignedFieldIsBoundToTheSignature(uint8,uint256) (runs: 1000, μ: 298346, ~: 352529)\n[PASS] test_clearExpiredAfterBoundaryPreservesReplayProtection() (gas: 974662)\n[PASS] test_clearExpiredAtBoundaryCannotEraseAnExecutableProposal() (gas: 1216965)\n[PASS] test_delayedAgeIncreaseIsRecheckedAtActivation() (gas: 1211646)\n[PASS] test_delayedMethodologyChangeInvalidatesPendingProposal() (gas: 1221045)\n[PASS] test_delayedRevocationIsRecheckedAtActivation() (gas: 1207764)\n[PASS] test_delayedWeightCapReductionIsRecheckedAtActivation() (gas: 1264448)\n[PASS] test_failedQuorumDoesNotPoisonARetryWithValidSignatures() (gas: 828851)\n[PASS] test_signatureCannotBeReusedOnAnotherManager() (gas: 326192)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 93.41ms (97.98ms CPU time)\n\nRan 21 tests for test/FeeHook.t.sol:FeeHookErc20QuoteLowTest\n[PASS] testFuzz_feeAccountingMatchesAcrossSwapShapes(uint256,bool,bool) (runs: 256, μ: 385658, ~: 387078)\n[PASS] test_buyExactInput_feeTakenFromTheQuotePaid() (gas: 380419)\n[PASS] test_buyExactOutput_feeAddedToTheQuotePaid() (gas: 357085)\n[PASS] test_callbacksAreOnlyForThePoolManager() (gas: 114108)\n[PASS] test_create2CollisionCannotMarkHookAsDeployed() (gas: 23704765)\n[PASS] test_deployerAuthenticatesCodeAndAppendsOnlyItsFixedArguments() (gas: 25180773)\n[PASS] test_deployerRejectsAQuoteTheWaterfallCannotAccountFor() (gas: 651839)\n[PASS] test_deployerRejectsWrongSaltAndSecondDeployment() (gas: 25112274)\n[PASS] test_dustSwapWithZeroFeeStillWorks() (gas: 247265)\n[PASS] test_feeAndSplitChangesReachTheHookThroughTheTimelockOnly() (gas: 704022)\n[PASS] test_feeEventIsIndexedByPoolSenderAndCurrency() (gas: 371441)\n[PASS] test_feeIsAlwaysCollectedInTheQuoteCurrencyNeverInTheProjectToken() (gas: 1162204)\n[PASS] test_feesFlowFromSwapToWaterfallToVaultWithoutTradingTheBasket() (gas: 1188828)\n[PASS] test_hookAcceptsOnlyItsOnePool() (gas: 810088)\n[PASS] test_hookAddressCarriesExactlyTheRequiredPermissionBits() (gas: 75204)\n[PASS] test_quoteIsCurrencyZero() (gas: 5581)\n[PASS] test_quoteSpecifiedExactInputExhaustedRangeRevertsAtomically() (gas: 752725)\n[PASS] test_quoteSpecifiedExactOutputPartialFillRevertsAtomically() (gas: 293009)\n[PASS] test_sellExactInput_feeTakenFromTheQuoteReceived() (gas: 350941)\n[PASS] test_sellExactOutput_traderStillReceivesTheExactQuote() (gas: 351230)\n[PASS] test_zeroHookFeeLeavesSwapsUntouched() (gas: 436444)\nSuite result: ok. 21 passed; 0 failed; 0 skipped; finished in 100.17ms (165.15ms CPU time)\n\nRan 14 tests for test/FeeWaterfall.t.sol:FeeWaterfallTest\n[PASS] testFuzz_distributionConservesEveryUnit(uint256,uint256,uint16,uint16) (runs: 256, μ: 423333, ~: 428303)\n[PASS] test_basketReserveIsDepositedAtNavForTheTreasury() (gas: 841029)\n[PASS] test_basketReserveKeepsAccumulatingWhileTheVaultIsClosed() (gas: 931489)\n[PASS] test_claimPaysOnlyTheConfiguredRecipient() (gas: 1329657)\n[PASS] test_configurationIsTimelockOnly() (gas: 102613)\n[PASS] test_distributeSplitsTheNonLpSeventyFivePercent() (gas: 388340)\n[PASS] test_pushHonoursMinShares() (gas: 425705)\n[PASS] test_rescueCannotTouchFeeAssets() (gas: 931184)\n[PASS] test_roundingDustGoesToTheBasketReserve() (gas: 246455)\n[PASS] test_splitChangeOnlyAffectsLaterFees() (gas: 789294)\n[PASS] test_splitMustSumToOneHundredPercent() (gas: 81320)\n[PASS] test_staleBasketSurchargeIsAppliedOnlyWhileStale() (gas: 1512119)\n[PASS] test_startingSplitAndFeeAreVisibleOnChain() (gas: 54016)\n[PASS] test_swapFeeIsBoundedAtThreePercentIncludingSurcharge() (gas: 94494)\nSuite result: ok. 14 passed; 0 failed; 0 skipped; finished in 153.94ms (153.42ms CPU time)\n\nRan 21 tests for test/FeeHook.t.sol:FeeHookNativeEthTest\n[PASS] testFuzz_feeAccountingMatchesAcrossSwapShapes(uint256,bool,bool) (runs: 256, μ: 320224, ~: 325051)\n[PASS] test_buyExactInput_feeTakenFromTheQuotePaid() (gas: 325183)\n[PASS] test_buyExactOutput_feeAddedToTheQuotePaid() (gas: 301553)\n[PASS] test_callbacksAreOnlyForThePoolManager() (gas: 114036)\n[PASS] test_create2CollisionCannotMarkHookAsDeployed() (gas: 162273386)\n[PASS] test_deployerAuthenticatesCodeAndAppendsOnlyItsFixedArguments() (gas: 163749408)\n[PASS] test_deployerRejectsAQuoteTheWaterfallCannotAccountFor() (gas: 651839)\n[PASS] test_deployerRejectsWrongSaltAndSecondDeployment() (gas: 163680931)\n[PASS] test_dustSwapWithZeroFeeStillWorks() (gas: 214260)\n[PASS] test_feeAndSplitChangesReachTheHookThroughTheTimelockOnly() (gas: 658115)\n[PASS] test_feeEventIsIndexedByPoolSenderAndCurrency() (gas: 314151)\n[PASS] test_feeIsAlwaysCollectedInTheQuoteCurrencyNeverInTheProjectToken() (gas: 973549)\n[PASS] test_feesFlowFromSwapToWaterfallToVaultWithoutTradingTheBasket() (gas: 1132963)\n[PASS] test_hookAcceptsOnlyItsOnePool() (gas: 810004)\n[PASS] test_hookAddressCarriesExactlyTheRequiredPermissionBits() (gas: 75182)\n[PASS] test_nativeFeesArriveAsEthAndTheReceiveHookDoesNothing() (gas: 330760)\n[PASS] test_quoteSpecifiedExactInputExhaustedRangeRevertsAtomically() (gas: 638393)\n[PASS] test_quoteSpecifiedExactOutputPartialFillRevertsAtomically() (gas: 242603)\n[PASS] test_sellExactInput_feeTakenFromTheQuoteReceived() (gas: 288369)\n[PASS] test_sellExactOutput_traderStillReceivesTheExactQuote() (gas: 288953)\n[PASS] test_zeroHookFeeLeavesSwapsUntouched() (gas: 406821)\nSuite result: ok. 21 passed; 0 failed; 0 skipped; finished in 157.79ms (327.89ms CPU time)\n\nRan 22 tests for test/IndexVault.t.sol:IndexVaultTest\n[PASS] testFuzz_depositThenRedeemNeverReturnsMore(uint256,uint256) (runs: 256, μ: 5928631, ~: 5936567)\n[PASS] test_depositCapBoundsTheBeta() (gas: 1011567)\n[PASS] test_depositFeeAccruesToExistingHolders() (gas: 946551)\n[PASS] test_depositHonoursMinShares() (gas: 434943)\n[PASS] test_depositIsRefusedWhileAHeldTokenHasNoFreshPrice() (gas: 5061980)\n[PASS] test_depositRejectsZeroAmountAndZeroReceiver() (gas: 185781)\n[PASS] test_depositsStayClosedUntilAGuardianExists() (gas: 28153437)\n[PASS] test_donationInflationDoesNotStealFromTheNextDepositor() (gas: 760549)\n[PASS] test_executorCannotTakeUntrackedTokenOrEndWithoutBegin() (gas: 485451)\n[PASS] test_firstDepositMintsOneShareUnitPerReserveUnit() (gas: 357848)\n[PASS] test_laterDepositorPaysCurrentNav() (gas: 4773481)\n[PASS] test_navAndHoldingsFollowTheBasketAndPrices() (gas: 4955557)\n[PASS] test_onlyTheExecutorContractMovesAssets() (gas: 540082)\n[PASS] test_pauseClosesDepositsButNeverRedemptions() (gas: 559523)\n[PASS] test_redeemPaysProRataInKind() (gas: 4960250)\n[PASS] test_redeemRejectsZeroAndMoreThanBalance() (gas: 404240)\n[PASS] test_redeemWorksWithSwarmKeeperAndOraclesAllOffline() (gas: 4930189)\n[PASS] test_rescueCannotTouchReserveOrBasket() (gas: 5190181)\n[PASS] test_shareTokenMetadata() (gas: 41233)\n[PASS] test_tokenWithBrokenBalanceOfBlocksDepositsNotRedemptions() (gas: 5131387)\n[PASS] test_untransferableTokenCannotTrapHolders() (gas: 4826818)\n[PASS] test_wrongReserveDecimalsAreCaughtOnFirstDeposit() (gas: 156998)\nSuite result: ok. 22 passed; 0 failed; 0 skipped; finished in 342.35ms (382.88ms CPU time)\n\nRan 41 tests for test/EpochManager.t.sol:EpochManagerTest\n[PASS] test_activatedProposalCannotBeReplayed() (gas: 1235847)\n[PASS] test_activationFailsOnceExpiredButSucceedsAtTheExpirySecond() (gas: 1411229)\n[PASS] test_basketGoesStaleWithoutSwarmActivityAndAReportRefreshesIt() (gas: 1837118)\n[PASS] test_basketMayHoldFewerThanFiveAndLeaveTheRestInReserve() (gas: 974431)\n[PASS] test_cancelledProposalCannotBeReplayed() (gas: 799075)\n[PASS] test_digestMatchesIndependentEip712Computation() (gas: 67665)\n[PASS] test_onlyOnePendingProposalUntilItExpires() (gas: 1340173)\n[PASS] test_pauseBlocksPublishAndActivate() (gas: 964870)\n[PASS] test_proposalSignedForAnOlderSignerSetIsRejected() (gas: 200105)\n[PASS] test_publishThenActivateAfterDelay() (gas: 1250824)\n[PASS] test_rejectsAProposalChangedAfterSigning() (gas: 290264)\n[PASS] test_rejectsASignatureFromANonSigner() (gas: 288805)\n[PASS] test_rejectsAttestedMarketDataBelowTheMinimums() (gas: 1218616)\n[PASS] test_rejectsBelowQuorum() (gas: 276586)\n[PASS] test_rejectsExpiredProposal() (gas: 149951)\n[PASS] test_rejectsExpiryThatCannotOutliveTheDelay() (gas: 695183)\n[PASS] test_rejectsExpiryTooFarAhead() (gas: 150567)\n[PASS] test_rejectsMalformedAndMalleableSignatures() (gas: 514847)\n[PASS] test_rejectsMismatchedArrays() (gas: 470056)\n[PASS] test_rejectsMoreThanFiveAssets() (gas: 163595)\n[PASS] test_rejectsQuarantinedToken() (gas: 243675)\n[PASS] test_rejectsStaleAndFutureSnapshots() (gas: 808215)\n[PASS] test_rejectsTheSameSignerTwice() (gas: 290281)\n[PASS] test_rejectsTokenThatIsNotAllowlisted() (gas: 859774)\n[PASS] test_rejectsTokenWithStalePrice() (gas: 287541)\n[PASS] test_rejectsTokenYoungerThanThirtyDays() (gas: 1696545)\n[PASS] test_rejectsTotalWeightAbove100Percent() (gas: 1146659)\n[PASS] test_rejectsWeightAboveTheTokenCap() (gas: 192616)\n[PASS] test_rejectsWhenNoQuorumIsConfigured() (gas: 369577)\n[PASS] test_rejectsWrongEpoch() (gas: 191280)\n[PASS] test_rejectsWrongMethodologyVersion() (gas: 157342)\n[PASS] test_rejectsZeroWeightAndDuplicates() (gas: 509371)\n[PASS] test_replacingLargeBasketTruncatesArraysAndClearsEveryPendingField() (gas: 2315520)\n[PASS] test_reportAnchorNeedsQuorumAndAFreshNewerSnapshot() (gas: 496464)\n[PASS] test_revokingASignerDuringTheDelayInvalidatesThePendingProposal() (gas: 880130)\n[PASS] test_secondEpochNeedsANewerSnapshot() (gas: 1323758)\n[PASS] test_signatureFromAnotherChainIsRejected() (gas: 290803)\n[PASS] test_staleFeedAtActivationBlocksActivation() (gas: 690018)\n[PASS] test_tokenQuarantinedDuringTheDelayBlocksActivation() (gas: 984868)\n[PASS] test_turnoverLimitCapsAdditionsPerEpoch() (gas: 2293819)\n[PASS] test_weeklyCadenceBlocksAnEarlySecondEpoch() (gas: 2279641)\nSuite result: ok. 41 passed; 0 failed; 0 skipped; finished in 342.32ms (67.52ms CPU time)\n\nRan 9 tests for test/adversarial/ExternalTokenFailures.t.sol:ExternalTokenFailuresTest\n[PASS] testFuzz_taxedReserveCannotMintSharesForUnreceivedAssets(uint256) (runs: 1000, μ: 1022591, ~: 1024126)\n[PASS] test_failedFeeTransferRollsBackLiabilitiesAndUnlocksClaims() (gas: 1034474)\n[PASS] test_falseReturnStrictRollbackAndNonStrictExit() (gas: 1069012)\n[PASS] test_invalidBooleanStrictRollbackAndNonStrictExit() (gas: 1069357)\n[PASS] test_minShareFailureRollsBackFeeDistributionAndApproval() (gas: 905351)\n[PASS] test_noReturnTokenIsPaidDuringStrictRedemption() (gas: 954053)\n[PASS] test_reserveCallbacksCannotReenterOnDepositOrRedemption() (gas: 1278434)\n[PASS] test_shortReturnStrictRollbackAndNonStrictExit() (gas: 1068812)\n[PASS] test_taxedReserveOneUnitAndMaximumDeposit() (gas: 1991060)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 342.37ms (343.49ms CPU time)\n\nRan 24 tests for test/AssetRegistry.t.sol:AssetRegistryTest\n[PASS] testFuzz_convertRoundTripNeverCreatesValue(uint256,uint8,uint8) (runs: 256, μ: 72536, ~: 83242)\n[PASS] test_anyoneCanQuarantineAStaleTokenButNotAFreshOne() (gas: 150827)\n[PASS] test_approveTokenRejectsCodelessFeed() (gas: 760054)\n[PASS] test_approveTokenRejectsCodelessTokenAndFeed() (gas: 117530)\n[PASS] test_approveTokenRejectsReserveAsset() (gas: 117416)\n[PASS] test_approveTokenRejectsZeroCapAndFutureListing() (gas: 866368)\n[PASS] test_badFeedAnswersReadAsNoPrice() (gas: 364271)\n[PASS] test_convertFailsWhenReserveFeedIsStale() (gas: 70866)\n[PASS] test_convertHandlesDifferentDecimals() (gas: 172490)\n[PASS] test_defaultParametersMatchTheDocumentedStartingValues() (gas: 167510)\n[PASS] test_everySetterIsTimelockOnly() (gas: 178651)\n[PASS] test_freshPriceIsNormalisedTo18Decimals() (gas: 23738)\n[PASS] test_listedTokensAndAssetRecordArePublished() (gas: 41428)\n[PASS] test_methodologyVersionOnlyMovesForward() (gas: 514732)\n[PASS] test_minimumTokenAgeCannotGoBelowThirtyDays() (gas: 109737)\n[PASS] test_onlyGuardianExecutorOrTimelockQuarantine() (gas: 583327)\n[PASS] test_paramsStayInsideHardBounds() (gas: 473219)\n[PASS] test_priceIsValidAtHeartbeatAndStaleOneSecondLater() (gas: 53355)\n[PASS] test_revertingOrMalformedFeedDoesNotRevertTheReader() (gas: 177818)\n[PASS] test_revokedTokenIsNotEligibleButStillPriced() (gas: 402836)\n[PASS] test_routerAllowlist() (gas: 396988)\n[PASS] test_slippageLimitCannotBeSwitchedOff() (gas: 109539)\n[PASS] test_tokenYoungerThanThirtyDaysIsNotEligible() (gas: 1623635)\n[PASS] test_windowCannotExceedInterval() (gas: 112207)\nSuite result: ok. 24 passed; 0 failed; 0 skipped; finished in 342.44ms (18.16ms CPU time)\n\nRan 26 tests for test/Revision.t.sol:RevisionTest\n[PASS] test_activationAtSnapshotAgeBoundarySucceeds() (gas: 1189864)\n[PASS] test_activationRechecksSnapshotAgeWithFreshPrices() (gas: 866414)\n[PASS] test_adminCanCancelRecoveryAndGuardianStillVetoesOtherCalls() (gas: 329190)\n[PASS] test_autoQuarantineDoesNotVetoProposalOrCloseFairDeposits() (gas: 3919750)\n[PASS] test_autoQuarantineRetainsDeltaAndWindowUntilGuardianConfirms() (gas: 6878086)\n[PASS] test_deadUntransferablePositionPreservesClaimsAndClosesDeposits() (gas: 5648607)\n[PASS] test_dustDepositCannotLockExistingShares() (gas: 5439911)\n[PASS] test_emptyBasketCannotResetTurnoverHistory() (gas: 1833111)\n[PASS] test_firstDepositChecksRegistryReserveScale() (gas: 159589)\n[PASS] test_firstTradeCannotChooseWindowStart() (gas: 1829943)\n[PASS] test_fullDustExitCanFreeHeldSlot() (gas: 5167650)\n[PASS] test_gasBurningUnquarantinedBalanceFailsWithBoundedError() (gas: 5682630)\n[PASS] test_guardianCannotVetoReplacementOrUnpause() (gas: 881452)\n[PASS] test_heldQuarantineClosesDepositsEvenWithFreshFeed() (gas: 4705525)\n[PASS] test_keeperFailuresCannotCreateExitRightsForAnyMember() (gas: 13863486)\n[PASS] test_lateFirstTradeUsesTheActivationSchedule() (gas: 2542285)\n[PASS] test_newSharesCannotRedeemInTheirDepositBlock() (gas: 5048795)\n[PASS] test_newSharesCannotTransferOrTransferFromToBypassLock() (gas: 4836815)\n[PASS] test_onlyKeeperOrTimelockChoosesTreasuryDepositTime() (gas: 507779)\n[PASS] test_proposalDelayAndSnapshotAgeMustLeaveExecutionTime() (gas: 1315527)\n[PASS] test_proposalDelayCannotConsumeEntireValidityPeriod() (gas: 33045)\n[PASS] test_quarantinedGasBurnerCannotStopUnrelatedTrades() (gas: 5369040)\n[PASS] test_releaseStartsANewFailureStreak() (gas: 6663761)\n[PASS] test_strictUnreadableBalancePreservesSharesAfterHoldingPeriod() (gas: 4584309)\n[PASS] test_unreadableNonStrictRedemptionEmitsUnknownSkippedSlice() (gas: 4627010)\n[PASS] test_untrackedDonationDoesNotBlockMemberPurchase() (gas: 1982111)\nSuite result: ok. 26 passed; 0 failed; 0 skipped; finished in 342.39ms (91.43ms CPU time)\n\nRan 1 test for test/invariant/Solvency.invariant.t.sol:SolvencyInvariantTest\n[PASS]\nSolvencyInvariantTest invariants:\n[PASS] invariant_executorHoldsNothingBetweenTrades\n[PASS] invariant_feeAccountingConserves\n[PASS] invariant_noPropertyViolatedMidSequence\n[PASS] invariant_vaultIsSolventAndConsistent\n SolvencyInvariantTest invariants (runs: 32, calls: 2048, reverts: 0)\n\n╭----------+-------------------+-------+---------+----------╮\n| Contract | Selector          | Calls | Reverts | Discards |\n+===========================================================+\n| Handler  | claim             | 288   | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | collectFees       | 276   | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | deposit           | 303   | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | movePrice         | 289   | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | pushBasketReserve | 305   | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | rebalance         | 298   | 0       | 0        |\n|----------+-------------------+-------+---------+----------|\n| Handler  | redeem            | 289   | 0       | 0        |\n╰----------+-------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.08s (2.07s CPU time)\n\nRan 1 test for test/adversarial/TreasurySequence.invariant.t.sol:TreasurySequenceInvariantTest\n[PASS] invariant_treasuryAndFixedSupplyConserveValue() (runs: 256, calls: 24576, reverts: 0)\n\n╭-------------------------+---------------------+-------+---------+----------╮\n| Contract                | Selector            | Calls | Reverts | Discards |\n+============================================================================+\n| TreasurySequenceHandler | advance             | 3497  | 0       | 0        |\n|-------------------------+---------------------+-------+---------+----------|\n| TreasurySequenceHandler | cancel              | 3540  | 0       | 0        |\n|-------------------------+---------------------+-------+---------+----------|\n| TreasurySequenceHandler | execute             | 3560  | 0       | 0        |\n|-------------------------+---------------------+-------+---------+----------|\n| TreasurySequenceHandler | fund                | 3509  | 0       | 0        |\n|-------------------------+---------------------+-------+---------+----------|\n| TreasurySequenceHandler | moveLaunchTokens    | 3381  | 0       | 0        |\n|-------------------------+---------------------+-------+---------+----------|\n| TreasurySequenceHandler | schedule            | 3532  | 0       | 0        |\n|-------------------------+---------------------+-------+---------+----------|\n| TreasurySequenceHandler | unauthorizedExecute | 3557  | 0       | 0        |\n╰-------------------------+---------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.64s (3.64s CPU time)\n\nRan 1 test for test/adversarial/CustodySequence.invariant.t.sol:CustodySequenceInvariantTest\n[PASS]\nCustodySequenceInvariantTest invariants:\n[PASS] invariant_allSharesAreBackedAndAccountedFor\n[PASS] invariant_everyReserveUnitHasADestination\n CustodySequenceInvariantTest invariants (runs: 256, calls: 24576, reverts: 0)\n\n╭------------------------+----------------+-------+---------+----------╮\n| Contract               | Selector       | Calls | Reverts | Discards |\n+======================================================================+\n| CustodySequenceHandler | changeSplit    | 2093  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | claim          | 2024  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | deposit        | 1974  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | distribute     | 2036  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | donate         | 2066  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | push           | 1999  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | receiveFees    | 2095  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | redeem         | 1997  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | roundTrip      | 2095  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | togglePause    | 1996  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | transferShares | 2069  | 0       | 0        |\n|------------------------+----------------+-------+---------+----------|\n| CustodySequenceHandler | treasuryRedeem | 2132  | 0       | 0        |\n╰------------------------+----------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 6.64s (6.62s CPU time)\n\nRan 19 test suites in 6.65s (15.04s CPU time): 280 tests passed, 0 failed, 1 skipped (281 total tests)\n","passed":true},{"durationMs":105,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"AssetRegistry.approveToken(address,address,uint32,uint16,uint40,bytes32)\",\"AssetRegistry.quarantine(address)\",\"AssetRegistry.quarantineIfStale(address)\",\"AssetRegistry.releaseQuarantine(address)\",\"AssetRegistry.revokeToken(address)\",\"AssetRegistry.setMethodology(uint32,bytes32)\",\"AssetRegistry.setParam(uint8,uint256)\",\"AssetRegistry.setReserveFeed(address,uint32)\",\"AssetRegistry.setRouter(address,bool)\",\"EpochManager.activate()\",\"EpochManager.anchorReport(uint64,bytes32,bytes[])\",\"EpochManager.cancelPending()\",\"EpochManager.clearExpired()\",\"EpochManager.publish((uint64,uint64,uint64,uint32,uint32,bytes32,address[],uint16[],uint256[],uint256[],uint256[]),bytes[])\",\"FeeHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"FeeHook.beforeInitialize(address,(address,address,uint24,int24,address),uint160)\",\"FeeHook.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"FeeHookDeployer.deploy(bytes32,bytes)\",\"FeeWaterfall.claim(uint8)\",\"FeeWaterfall.distribute()\",\"FeeWaterfall.pushBasketReserve(uint256)\",\"FeeWaterfall.receive()\",\"FeeWaterfall.rescue(address,address)\",\"FeeWaterfall.setRecipient(uint8,address)\",\"FeeWaterfall.setSplit(uint16,uint16,uint16,uint16,uint16)\",\"FeeWaterfall.setSwapFee(uint24,uint24)\",\"IndexVault.approve(address,uint256)\",\"IndexVault.beginTrade(address,uint256)\",\"IndexVault.deposit(uint256,address,uint256)\",\"IndexVault.endTrade(address)\",\"IndexVault.redeem(uint256,address,bool)\",\"IndexVault.rescue(address,address)\",\"IndexVault.setDepositCap(uint256)\",\"IndexVault.transfer(address,uint256)\",\"IndexVault.transferFrom(address,address,uint256)\",\"LaunchToken.approve(address,uint256)\",\"LaunchToken.transfer(address,uint256)\",\"LaunchToken.transferFrom(address,address,uint256)\",\"RebalanceExecutor.disposeQuarantined(address,uint256,uint256,address,bytes)\",\"RebalanceExecutor.executeTrade(address,address,uint256,uint256,address,bytes)\",\"RebalanceExecutor.swapThroughRouter(address,address,uint256,uint256,address,bytes)\",\"TimelockedAdmin.acceptAdmin()\",\"TimelockedAdmin.cancel(bytes32)\",\"TimelockedAdmin.execute(address,uint256,bytes,bytes32)\",\"TimelockedAdmin.pause()\",\"TimelockedAdmin.receive()\",\"TimelockedAdmin.revokeKeeper(address)\",\"TimelockedAdmin.revokeSigner(address)\",\"TimelockedAdmin.schedule(address,uint256,bytes,bytes32,uint256)\",\"TimelockedAdmin.setExecutor(address)\",\"TimelockedAdmin.setGuardian(address)\",\"TimelockedAdmin.setKeeper(address,bool)\",\"TimelockedAdmin.setMinDelay(uint256)\",\"TimelockedAdmin.setQuorum(uint32)\",\"TimelockedAdmin.setSigner(address,bool)\",\"TimelockedAdmin.transferAdmin(address)\",\"TimelockedAdmin.unpause()\"],\"files\":{\".gitignore\":3,\"README.md\":299,\"docs/LAUNCH-816.md\":149,\"docs/METHODOLOGY.md\":139,\"docs/PROPOSAL.md\":99,\"docs/SECURITY.md\":105,\"foundry.toml\":34,\"launch.json\":71,\"script/Deploy.s.sol\":65,\"src/AssetRegistry.sol\":340,\"src/EpochManager.sol\":404,\"src/FeeHook.sol\":258,\"src/FeeHookDeployer.sol\":108,\"src/FeeWaterfall.sol\":254,\"src/IndexVault.sol\":407,\"src/LaunchToken.sol\":16,\"src/RebalanceExecutor.sol\":384,\"src/TimelockedAdmin.sol\":283,\"src/interfaces/IIndex.sol\":91,\"test/AssetRegistry.t.sol\":298,\"test/Deployment.t.sol\":155,\"test/EpochManager.t.sol\":611,\"test/FeeHook.t.sol\":481,\"test/FeeWaterfall.t.sol\":239,\"test/IndexVault.t.sol\":366,\"test/Launch816.t.sol\":113,\"test/LaunchToken.t.sol\":69,\"test/RebalanceExecutor.t.sol\":488,\"test/Revision.t.sol\":426,\"test/TimelockedAdmin.t.sol\":272,\"test/adversarial/CustodySequence.invariant.t.sol\":315,\"test/adversarial/ExternalTokenFailures.t.sol\":212,\"test/adversarial/ProposalBoundaries.t.sol\":129,\"test/adversarial/README.md\":42,\"test/adversarial/TreasurySequence.invariant.t.sol\":224,\"test/fork/Launch816Fork.t.sol\":92,\"test/invariant/Handler.sol\":165,\"test/invariant/Solvency.invariant.t.sol\":95,\"test/utils/Fixture.sol\":282,\"test/utils/Launch816.sol\":220,\"test/utils/Launch816Original.sol\":40,\"test/utils/Mocks.sol\":180,\"test/utils/V4Router.sol\":78},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":4505,"exitCode":0,"name":"slither","output":"[high/medium] reentrancy-balance at src/RebalanceExecutor.sol:174: Reentrancy in RebalanceExecutor._swap(address,address,uint256,uint256,address,bytes) (src/RebalanceExecutor.sol#174-201):\n[high/medium] reentrancy-balance at src/RebalanceExecutor.sol:174: Reentrancy in RebalanceExecutor._swap(address,address,uint256,uint256,address,bytes) (src/RebalanceExecutor.sol#174-201):\n[high/medium] reentrancy-eth at src/FeeWaterfall.sol:123: Reentrancy in FeeWaterfall.pushBasketReserve(uint256) (src/FeeWaterfall.sol#123-133):\n[high/medium] reentrancy-eth at src/FeeWaterfall.sol:107: Reentrancy in FeeWaterfall.claim(FeeWaterfall.Bucket) (src/FeeWaterfall.sol#107-118):\n[high/medium] reentrancy-eth at src/FeeWaterfall.sol:137: Reentrancy in FeeWaterfall.setSplit(uint16,uint16,uint16,uint16,uint16) (src/FeeWaterfall.sol#137-147):\n[medium/medium] divide-before-multiply at src/FeeHook.sol:239: FeeHook._collect(address,uint256,FeeHook.FeeQuote,bool) (src/FeeHook.sol#239-252) performs a multiplication on the result of a division:\n[medium/medium] divide-before-multiply at src/RebalanceExecutor.sol:276: RebalanceExecutor._requireWindow() (src/RebalanceExecutor.sol#276-288) performs a multiplication on the result of a division:\n[medium/medium] divide-before-multiply at src/RebalanceExecutor.sol:300: RebalanceExecutor._target(address,uint256) (src/RebalanceExecutor.sol#300-304) performs a multiplication on the result of a division:\n[medium/high] incorrect-equality at src/TimelockedAdmin.sol:153: TimelockedAdmin.cancel(bytes32) (src/TimelockedAdmin.sol#153-160) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/IndexVault.sol:117: IndexVault.deposit(uint256,address,uint256) (src/IndexVault.sol#117-151) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/EpochManager.sol:299: EpochManager.basketStale() (src/EpochManager.sol#299-303) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/IndexVault.sol:326: IndexVault._update(address,address,uint256) (src/IndexVault.sol#326-332) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/EpochManager.sol:211: EpochManager.cancelPending() (src/EpochManager.sol#211-215) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/RebalanceExecutor.sol:216: RebalanceExecutor._authorize(address,address,uint256) (src/RebalanceExecutor.sol#216-274) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/EpochManager.sol:218: EpochManager.clearExpired() (src/EpochManager.sol#218-222) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/FeeWaterfall.sol:212: FeeWaterfall._distribute() (src/FeeWaterfall.sol#212-235) uses a dangerous strict equality:\n[medium/medium] reentrancy-no-eth at src/RebalanceExecutor.sol:105: Reentrancy in RebalanceExecutor.executeTrade(address,address,uint256,uint256,address,bytes) (src/RebalanceExecutor.sol#105-139):\n[medium/medium] uninitialized-local at src/RebalanceExecutor.sol:225: RebalanceExecutor._authorize(address,address,uint256).exit (src/RebalanceExecutor.sol#225) is a local variable never initialized\n[medium/medium] uninitialized-local at src/EpochManager.sol:331: EpochManager._checkBasket(EpochManager.Proposal).total (src/EpochManager.sol#331) is a local variable never initialized\n[medium/medium] uninitialized-local at src/FeeWaterfall.sol:219: FeeWaterfall._distribute().protocol (src/FeeWaterfall.sol#219) is a local variable never initialized\n[medium/medium] uninitialized-local at src/EpochManager.sol:332: EpochManager._checkBasket(EpochManager.Proposal).additions (src/EpochManager.sol#332) is a local variable never initialized\n[medium/medium] uninitialized-local at src/EpochManager.sol:369: EpochManager._checkQuorum(bytes32,bytes[]).last (src/EpochManager.sol#369) is a local variable never initialized\n[medium/medium] uninitialized-local at src/RebalanceExecutor.sol:322: RebalanceExecutor._nav().value (src/RebalanceExecutor.sol#322) is a local variable never initialized\n[medium/medium] uninitialized-local at src/FeeWaterfall.sol:218: FeeWaterfall._distribute().swarm (src/FeeWaterfall.sol#218) is a local variable never initialized\n[medium/medium] uninitialized-local at src/IndexVault.sol:347: IndexVault._nav().tokenValue (src/IndexVault.sol#347) is a local variable never initialized\n[medium/medium] uninitialized-local at src/FeeWaterfall.sol:220: FeeWaterfall._distribute().utility (src/FeeWaterfall.sol#220) is a local variable never initialized\n[low/medium] missing-zero-check at src/AssetRegistry.sol:161: AssetRegistry.setReserveFeed(address,uint32).feed (src/AssetRegistry.sol#161) lacks a zero-check on :\n[low/medium] missing-zero-check at src/FeeWaterfall.sol:86: FeeWaterfall.constructor(address,address,address,address).weth_ (src/FeeWaterfall.sol#86) lacks a zero-check on :\n[low/medium] calls-loop at src/IndexVault.sol:356: IndexVault._balanceOf(address) (src/IndexVault.sol#356-360) has external calls inside a loop: (ok,ret) = token.staticcall{gas: TRANSFER_GAS}(abi.encodeCall(IERC20.balanceOf,(address(this)))) (src/IndexVault.sol#357-358)\n[low/medium] calls-loop at src/IndexVault.sol:356: IndexVault._balanceOf(address) (src/IndexVault.sol#356-360) has external calls inside a loop: (ok,ret) = token.staticcall{gas: TRANSFER_GAS}(abi.encodeCall(IERC20.balanceOf,(address(this)))) (src/IndexVault.sol#357-358)\n[low/medium] calls-loop at src/RebalanceExecutor.sol:372: RebalanceExecutor._registryConvert(address,uint256,address) (src/RebalanceExecutor.sol#372-374) has external calls inside a loop: registry.convert(from,amount,to) (src/RebalanceExecutor.sol#373)\n[low/medium] calls-loop at src/IndexVault.sol:383: IndexVault._registryConvert(address,uint256,address) (src/IndexVault.sol#383-385) has external calls inside a loop: registry.convert(from,amount,to) (src/IndexVault.sol#384)\n[low/medium] calls-loop at src/EpochManager.sol:397: EpochManager._maxWeightBps(address) (src/EpochManager.sol#397-399) has external calls inside a loop: registry.maxWeightBps(token) (src/EpochManager.sol#398)\n[low/medium] calls-loop at src/IndexVault.sol:356: IndexVault._balanceOf(address) (src/IndexVault.sol#356-360) has external calls inside a loop: (ok,ret) = token.staticcall{gas: TRANSFER_GAS}(abi.encodeCall(IERC20.balanceOf,(address(this)))) (src/IndexVault.sol#357-358)\n[low/medium] calls-loop at src/EpochManager.sol:397: EpochManager._maxWeightBps(address) (src/EpochManager.sol#397-399) has external calls inside a loop: registry.maxWeightBps(token) (src/EpochManager.sol#398)\n[low/medium] calls-loop at src/EpochManager.sol:363: EpochManager._checkQuorum(bytes32,bytes[]) (src/EpochManager.sol#363-377) has external calls inside a loop: admin.roleOf(signer) != Role.Signer (src/EpochManager.sol#373)\n[low/medium] calls-loop at src/IndexVault.sol:356: IndexVault._balanceOf(address) (src/IndexVault.sol#356-360) has external calls inside a loop: (ok,ret) = token.staticcall{gas: TRANSFER_GAS}(abi.encodeCall(IERC20.balanceOf,(address(this)))) (src/IndexVault.sol#357-358)\n[low/medium] calls-loop at src/EpochManager.sol:393: EpochManager._isEligible(address) (src/EpochManager.sol#393-395) has external calls inside a loop: registry.isEligible(token) (src/EpochManager.sol#394)\n[low/medium] calls-loop at src/RebalanceExecutor.sol:348: RebalanceExecutor._isQuarantined(address) (src/RebalanceExecutor.sol#348-350) has external calls inside a loop: registry.isQuarantined(token) (src/RebalanceExecutor.sol#349)\n[low/medium] calls-loop at src/IndexVault.sol:336: IndexVault._nav() (src/IndexVault.sol#336-352) has external calls inside a loop: registry.isQuarantined(token) (src/IndexVault.sol#343)\n[low/medium] calls-loop at src/IndexVault.sol:336: IndexVault._nav() (src/IndexVault.sol#336-352) has external calls inside a loop: registry.isQuarantined(token) (src/IndexVault.sol#343)\n[low/medium] calls-loop at src/RebalanceExecutor.sol:315: RebalanceExecutor._nav() (src/RebalanceExecutor.sol#315-333) has external calls inside a loop: (ok,ret) = held[i].staticcall{gas: BALANCE_GAS}(abi.encodeCall(IERC20.balanceOf,(address(vault)))) (src/RebalanceExecutor.sol#320-321)\n[low/medium] calls-loop at src/IndexVault.sol:383: IndexVault._registryConvert(address,uint256,address) (src/IndexVault.sol#383-385) has external calls inside a loop: registry.convert(from,amount,to) (src/IndexVault.sol#384)\n[low/medium] calls-loop at src/IndexVault.sol:356: IndexVault._balanceOf(address) (src/IndexVault.sol#356-360) has external calls inside a loop: (ok,ret) = token.staticcall{gas: TRANSFER_GAS}(abi.encodeCall(IERC20.balanceOf,(address(this)))) (src/IndexVault.sol#357-358)\n[low/medium] calls-loop at src/IndexVault.sol:336: IndexVault._nav() (src/IndexVault.sol#336-352) has external calls inside a loop: registry.isQuarantined(token) (src/IndexVault.sol#343)\n[low/medium] calls-loop at src/IndexVault.sol:383: IndexVault._registryConvert(address,uint256,address) (src/IndexVault.sol#383-385) has external calls inside a loop: registry.convert(from,amount,to) (src/IndexVault.sol#384)\n[low/medium] calls-loop at src/RebalanceExecutor.sol:348: RebalanceExecutor._isQuarantined(address) (src/RebalanceExecutor.sol#348-350) has external calls inside a loop: registry.isQuarantined(token) (src/RebalanceExecutor.sol#349)\n[low/medium] calls-loop at src/EpochManager.sol:393: EpochManager._isEligible(address) (src/EpochManager.sol#393-395) has external calls inside a loop: registry.isEligible(token) (src/EpochManager.sol#394)\n[low/medium] calls-loop at src/IndexVault.sol:356: IndexVault._balanceOf(address) (src/IndexVault.sol#356-360) has external calls inside a loop: (ok,ret) = token.staticcall{gas: TRANSFER_GAS}(abi.encodeCall(IERC20.balanceOf,(address(this)))) (src/IndexVault.sol#357-358)\n[low/medium] calls-loop at src/RebalanceExecutor.sol:372: RebalanceExecutor._registryConvert(address,uint256,address) (src/RebalanceExecutor.sol#372-374) has external calls inside a loop: registry.convert(from,amount,to) (src/RebalanceExecutor.sol#373)\n[low/medium] calls-loop at src/RebalanceExecutor.sol:315: RebalanceExecutor._nav() (src/RebalanceExecutor.sol#315-333) has external calls inside a loop: (ok,ret) = held[i].staticcall{gas: BALANCE_GAS}(abi.encodeCall(IERC20.balanceOf,(address(vault)))) (src/RebalanceExecutor.sol#320-321)\n[low/medium] calls-loop at src/IndexVault.sol:356: IndexVault._balanceOf(address) (src/IndexVault.sol#356-360) has external calls inside a loop: (ok,ret) = token.staticcall{gas: TRANSFER_GAS}(abi.encodeCall(IERC20.balanceOf,(address(this)))) (src/IndexVault.sol#357-358)\n[low/medium] calls-loop at src/IndexVault.sol:362: IndexVault._tryTransfer(address,address,uint256) (src/IndexVault.sol#362-367) has external calls inside a loop: (ok,ret) = token.call{gas: TRANSFER_GAS}(abi.encodeCall(IERC20.transfer,(to,amount))) (src/IndexVault.sol#363)\n[low/medium] calls-loop at src/EpochManager.sol:363: EpochManager._checkQuorum(bytes32,bytes[]) (src/EpochManager.sol#363-377) has external calls inside a loop: admin.roleOf(signer) != Role.Signer (src/EpochManager.sol#373)\n[low/medium] calls-loop at src/IndexVault.sol:336: IndexVault._nav() (src/IndexVault.sol#336-352) has external calls inside a loop: registry.isQuarantined(token) (src/IndexVault.sol#343)\n[low/medium] calls-loop at src/IndexVault.sol:383: IndexVault._registryConvert(address,uint256,address) (src/IndexVault.sol#383-385) has external calls inside a loop: registry.convert(from,amount,to) (src/IndexVault.sol#384)\n[low/medium] calls-loop at src/IndexVault.sol:383: IndexVault._registryConvert(address,uint256,address) (src/IndexVault.sol#383-385) has external calls inside a loop: registry.convert(from,amount,to) (src/IndexVault.sol#384)\n[low/medium] calls-loop at src/IndexVault.sol:356: IndexVault._balanceOf(address) (src/IndexVault.sol#356-360) has external calls inside a loop: (ok,ret) = token.staticcall{gas: TRANSFER_GAS}(abi.encodeCall(IERC20.balanceOf,(address(this)))) (src/IndexVault.sol#357-358)\n[low/medium] reentrancy-benign at src/FeeWaterfall.sol:137: Reentrancy in FeeWaterfall.setSplit(uint16,uint16,uint16,uint16,uint16) (src/FeeWaterfall.sol#137-147):\n[low/medium] reentrancy-benign at src/FeeWaterfall.sol:212: Reentrancy in FeeWaterfall._distribute() (src/FeeWaterfall.sol#212-235):\n[low/medium] reentrancy-events at src/FeeWaterfall.sol:137: Reentrancy in FeeWaterfall.setSplit(uint16,uint16,uint16,uint16,uint16) (src/FeeWaterfall.sol#137-147):\n[low/medium] reentrancy-events at src/TimelockedAdmin.sol:126: Reentrancy in TimelockedAdmin.execute(address,uint256,bytes,bytes32) (src/TimelockedAdmin.sol#126-149):\n[low/medium] reentrancy-events at src/FeeWaterfall.sol:212: Reentrancy in FeeWaterfall._distribute() (src/FeeWaterfall.sol#212-235):\n[low/medium] return-bomb at src/RebalanceExecutor.sol:315: RebalanceExecutor._nav() (src/RebalanceExecutor.sol#315-333) tries to limit the gas of an external call that controls implicit decoding\n[low/medium] return-bomb at src/RebalanceExecutor.sol:335: RebalanceExecutor._balanceOf(address) (src/RebalanceExecutor.sol#335-340) tries to limit the gas of an external call that controls implicit decoding\n[low/medium] return-bomb at src/IndexVault.sol:356: IndexVault._balanceOf(address) (src/IndexVault.sol#356-360) tries to limit the gas of an external call that controls implicit decoding\n[low/medium] timestamp at src/EpochManager.sol:289: EpochManager.targetWeightBps(address) (src/EpochManager.sol#289-295) uses timestamp for comparisons\n[low/medium] timestamp at src/RebalanceExecutor.sol:276: RebalanceExecutor._requireWindow() (src/RebalanceExecutor.sol#276-288) uses timestamp for comparisons\n[low/medium] timestamp at src/EpochManager.sol:312: EpochManager._checkTiming(EpochManager.Proposal,uint256) (src/EpochManager.sol#312-319) uses timestamp for comparisons\n[low/medium] timestamp at src/EpochManager.sol:176: EpochManager.activate() (src/EpochManager.sol#176-208) uses timestamp for comparisons\n[low/medium] timestamp at src/TimelockedAdmin.sol:153: TimelockedAdmin.cancel(bytes32) (src/TimelockedAdmin.sol#153-160) uses timestamp for comparisons\n[low/medium] timestamp at src/TimelockedAdmin.sol:126: TimelockedAdmin.execute(address,uint256,bytes,bytes32) (src/TimelockedAdmin.sol#126-149) uses timestamp for comparisons\n[low/medium] timestamp at src/AssetRegistry.sol:114: AssetRegistry.approveToken(address,address,uint32,uint16,uint40,bytes32) (src/AssetRegistry.sol#114-143) uses timestamp for comparisons\n[low/medium] timestamp at src/EpochManager.sol:353: EpochManager._isActiveMember(address) (src/EpochManager.sol#353-359) uses timestamp for comparisons\n[low/medium] timestamp at src/EpochManager.sol:211: EpochManager.cancelPending() (src/EpochManager.sol#211-215) uses timestamp for comparisons\n[low/medium] timestamp at src/EpochManager.sol:137: EpochManager.publish(EpochManager.Proposal,bytes[]) (src/EpochManager.sol#137-170) uses timestamp for comparisons\n[low/medium] timestamp at src/EpochManager.sol:299: EpochManager.basketStale() (src/EpochManager.sol#299-303) uses timestamp for comparisons\n[low/medium] timestamp at src/AssetRegistry.sol:318: AssetRegistry._feedPrice(address,uint8,uint32) (src/AssetRegistry.sol#318-335) uses timestamp for comparisons\n[low/medium] timestamp at src/EpochManager.sol:218: EpochManager.clearExpired() (src/EpochManager.sol#218-222) uses timestamp for comparisons\n[low/medium] timestamp at src/AssetRegistry.sol:269: AssetRegistry.isEligible(address) (src/AssetRegistry.sol#269-275) uses timestamp for comparisons\n[low/medium] timestamp at src/EpochManager.sol:228: EpochManager.anchorReport(uint64,bytes32,bytes[]) (src/EpochManager.sol#228-238) uses timestamp for comparisons","passed":true},{"durationMs":874,"exitCode":0,"name":"aderyn","output":"[high] reentrancy-state-change at src/AssetRegistry.sol:128: Reentrancy: State change after external call (11 places)\n[high] strict-equality-contract-balance at src/FeeWaterfall.sol:213: Dangerous strict equality checks on contract balances\n[high] unprotected-initializer at src/FeeHookDeployer.sol:82: Unprotected initializer\n[high] unsafe-casting at src/EpochManager.sol:158: Unsafe Casting of integers (2 places)\n[low] costly-loop at src/IndexVault.sol:212: Costly operations inside loop\n[low] large-numeric-literal at src/AssetRegistry.sol:27: Large Numeric Literal (14 places)\n[low] literal-instead-of-constant at src/AssetRegistry.sol:86: Literal Instead of Constant (31 places)\n[low] missing-inheritance at src/AssetRegistry.sol:14: Missing Inheritance (3 places)\n[low] non-reentrant-not-first at src/FeeWaterfall.sol:164: `nonReentrant` is Not the First Modifier\n[low] require-revert-in-loop at src/EpochManager.sol:193: Loop Contains `require`/`revert` (6 places)\n[low] state-no-address-check at src/AssetRegistry.sol:163: Address State Variable Set Without Checks\n[low] state-variable-could-be-immutable at src/IndexVault.sol:39: State Variable Could Be Immutable (4 places)\n[low] unchecked-return at src/FeeWaterfall.sol:111: Unchecked Return (3 places)\n[low] uninitialized-local-variable at src/EpochManager.sol:193: Uninitialized Local Variable (10 places)\n[low] unsafe-erc20-operation at src/IndexVault.sol:363: Unsafe ERC20 Operation\n[low] unused-public-function at src/FeeHookDeployer.sol:78: Public Function Not Used Internally\n[low] unused-state-variable at src/IndexVault.sol:29: Unused State Variable (2 places)","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"dc4b83dc4e24789f783451c91a3f3ae907d499c78e6c0005b361399920adc798","verifiedTreeHash":"b8800af76ee7df5b312018e26ee518f44636da27","verifierVersion":"0.1.0+7471272e"}]}