@bgd-labs/toolbox 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +103 -19
- package/dist/index.d.ts +103 -19
- package/dist/index.js +330 -60
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +318 -59
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/math/binary.ts","../src/aave/user.ts","../src/aave/reserve.ts","../src/aave/constants.ts","../src/aave/ray-math.ts","../src/aave/pool-math.ts","../../../node_modules/.pnpm/@bgd-labs+aave-address-book@4.15.0/node_modules/@bgd-labs/aave-address-book/src/ts/abis/IPayloadsControllerCore.ts","../../../node_modules/.pnpm/@bgd-labs+aave-address-book@4.15.0/node_modules/@bgd-labs/aave-address-book/src/ts/abis/IGovernanceCore.ts","../src/aave/governance/payloadsController.ts","../src/math/slot.ts","../src/aave/governance/governance.ts","../src/ecosystem/generated/etherscanExplorers.ts","../src/ecosystem/generated/routescanExplorers.ts","../src/ecosystem/explorers.ts","../src/ecosystem/tenderly.ts","../src/ecosystem/constants.ts","../src/operations/diffCode.ts"],"sourcesContent":["export * from \"./math/binary\";\nexport * from \"./aave/user\";\nexport * from \"./aave/reserve\";\nexport * from \"./aave/constants\";\nexport * from \"./aave/pool-math\";\nexport * from \"./aave/ray-math\";\nexport * from \"./aave/governance/payloadsController\";\nexport * from \"./aave/governance/governance\";\nexport * from \"./ecosystem/explorers\";\nexport * from \"./ecosystem/tenderly\";\n// export * from \"./ecosystem/ipfs\";\nexport * from \"./ecosystem/constants\";\nexport * from \"./operations/diffCode\";\n","/**\n * In solidity it is a quite common practice to encode bit variables in bitmaps opposed to bool structs.\n * The reason for this is that solidity will pack one boolean per byte, while with a bitmap, one can pack one bit.. per bit.\n * These utilities help with extracting the indexes of a given bitmap.\n */\n\n/**\n * Decodes a bitmap as an array of indexes.\n * @param bitmap The bitmap\n * @returns an array of indexes\n */\nexport function bitmapToIndexes(bitmap: bigint): number[] {\n const indexes: number[] = [];\n for (let i = 0; bitmap != 0n; i++) {\n if (bitmap & 0x1n) indexes.push(i);\n bitmap = bitmap >> 1n;\n }\n return indexes;\n}\n\n/**\n * Returns the selected bits of a uint256 as bigint\n * @param uint256\n * @param startBit\n * @param endBit\n * @returns\n */\nexport function getBits(\n uint256: bigint,\n startBit: bigint,\n _endBit: bigint,\n): bigint {\n let endBit = _endBit;\n if (startBit > endBit) {\n throw new Error(\n \"Invalid bit range: startBit must be less than or equal to endBit\",\n );\n }\n\n const bitLength = BigInt(uint256.toString(2)).toString().length;\n if (endBit >= bitLength) {\n endBit = BigInt(bitLength - 1);\n }\n\n const mask = (1n << (endBit - startBit + 1n)) - 1n;\n return (uint256 >> startBit) & mask;\n}\n\n/**\n * Sets the bits in a bigint\n * @param input\n * @param startBit inclusive\n * @param endBit inclusive\n * @param value the value to replace\n * @returns\n */\nexport function setBits(\n input: bigint,\n startBit: bigint,\n endBit: bigint,\n replaceValue: bigint | number,\n) {\n const bigIntReplaceValue = BigInt(replaceValue);\n\n // Calculate the mask for the specified range\n let mask = BigInt(0);\n for (let i = startBit; i < endBit + 1n; i++) {\n mask |= BigInt(1) << BigInt(i);\n }\n // Clear the bits in the original number within the specified range\n const clearedNumber = input & ~mask;\n\n // Set the new bits in the specified range\n const result = clearedNumber | (bigIntReplaceValue << BigInt(startBit));\n return result;\n}\n","import { bitmapToIndexes } from \"../math/binary\";\n\n/**\n * The userConfiguration on aave is stored as an alteranting bitmap.\n * The least significant bit starts with borrowing on reserve 0\n * In practice this means that the following bitmap b'1011 would mean a user\n * is borrowing(bit 0) reserve 0, and supplies(bit 1,3) collateral on reserve 0 and 1\n * @param userConfiguration bitmap\n */\nexport function decodeUserConfiguration(userConfiguration: bigint) {\n const indexes = bitmapToIndexes(userConfiguration);\n const borrowedAssetIds: number[] = [];\n const collateralAssetIds: number[] = [];\n for (const index of indexes) {\n if (index % 2 == 0) borrowedAssetIds.push(index / 2);\n else collateralAssetIds.push((index - 1) / 2);\n }\n return { borrowedAssetIds, collateralAssetIds };\n}\n","import { getBits } from \"../math/binary\";\n\nexport type ReserveConfiguration = {\n ltv: bigint;\n liquidationThreshold: bigint;\n liquidationBonus: bigint;\n decimals: bigint;\n active: boolean;\n frozen: boolean;\n borrowingEnabled: boolean;\n // deprecated in 3.1\n // stableRateBorrowingEnabled: boolean;\n paused: boolean;\n borrowingInIsolation: boolean;\n siloedBorrowingEnabled: boolean;\n flashloaningEnabled: boolean;\n reserveFactor: bigint;\n borrowCap: bigint;\n supplyCap: bigint;\n liquidationProtocolFee: bigint;\n // deprecated in 3.2\n // eModeCategory: bigint;\n unbackedMintCap: bigint;\n debtCeiling: bigint;\n virtualAccountingEnabled: boolean;\n};\n\n/**\n * ReserveConfiguration is a tightly packed struct that contains the configuration of a reserve\n * @param data\n * @returns the decoded ReserveConfiguration\n */\nexport function decodeReserveConfiguration(data: bigint): ReserveConfiguration {\n const ltv = getBits(data, 0n, 15n);\n const liquidationThreshold = getBits(data, 16n, 31n);\n const liquidationBonus = getBits(data, 32n, 47n);\n const decimals = getBits(data, 48n, 55n);\n const active = getBits(data, 56n, 56n);\n const frozen = getBits(data, 57n, 57n);\n const borrowingEnabled = getBits(data, 58n, 58n);\n // const stableRateBorrowingEnabled = getBits(data, 59n, 59n);\n const paused = getBits(data, 60n, 60n);\n const borrowingInIsolation = getBits(data, 61n, 61n);\n const siloedBorrowingEnabled = getBits(data, 62n, 62n);\n const flashloaningEnabled = getBits(data, 63n, 63n);\n const reserveFactor = getBits(data, 64n, 79n);\n const borrowCap = getBits(data, 80n, 115n);\n const supplyCap = getBits(data, 116n, 151n);\n const liquidationProtocolFee = getBits(data, 152n, 167n);\n // const eModeCategory = getBits(data, 168n, 175n);\n const unbackedMintCap = getBits(data, 176n, 211n);\n const debtCeiling = getBits(data, 212n, 251n);\n const virtualAccountingEnabled = getBits(data, 252n, 252n);\n\n return {\n ltv,\n liquidationThreshold,\n liquidationBonus,\n decimals,\n active: !!active,\n frozen: !!frozen,\n borrowingEnabled: !!borrowingEnabled,\n // stableRateBorrowingEnabled: !!stableRateBorrowingEnabled,\n paused: !!paused,\n borrowingInIsolation: !!borrowingInIsolation,\n reserveFactor,\n borrowCap,\n supplyCap,\n liquidationProtocolFee,\n // eModeCategory,\n unbackedMintCap,\n debtCeiling,\n siloedBorrowingEnabled: !!siloedBorrowingEnabled,\n flashloaningEnabled: !!flashloaningEnabled,\n virtualAccountingEnabled: !!virtualAccountingEnabled,\n };\n}\n\nexport function decodeReserveConfigurationV2(data: bigint) {\n const ltv = getBits(data, 0n, 15n);\n const liquidationThreshold = getBits(data, 16n, 31n);\n const liquidationBonus = getBits(data, 32n, 47n);\n const decimals = getBits(data, 48n, 55n);\n const active = Number(getBits(data, 56n, 56n));\n const frozen = Number(getBits(data, 57n, 57n));\n const borrowingEnabled = Number(getBits(data, 58n, 58n));\n const stableBorrowingEnabled = Number(getBits(data, 59n, 59n));\n const reserveFactor = getBits(data, 64n, 79n);\n return {\n ltv,\n liquidationThreshold,\n liquidationBonus,\n decimals,\n active: !!active,\n frozen: !!frozen,\n borrowingEnabled: !!borrowingEnabled,\n stableBorrowingEnabled: !!stableBorrowingEnabled,\n reserveFactor,\n };\n}\n","export const SECONDS_PER_YEAR = 31536000n;\nexport const LTV_PRECISION = 4n;\n","// JS implementation of https://github.com/bgd-labs/aave-v3-origin/blob/main/src/contracts/protocol/libraries/math/WadRayMath.sol\nexport const WAD = 10n ** 18n;\nexport const HALF_WAD = WAD / 2n;\n\nexport const RAY = 10n ** 27n;\nexport const HALF_RAY = RAY / 2n;\n\nexport const WAD_RAY_RATIO = 10n ** 9n;\n\nexport function rayMul(a: bigint, b: bigint): bigint {\n return (a * b + HALF_RAY) / RAY;\n}\n\nexport function rayDiv(a: bigint, b: bigint): bigint {\n const halfB = b / 2n;\n\n return (halfB + a * RAY) / b;\n}\n\nexport function rayToWad(a: bigint): bigint {\n const halfRatio = WAD_RAY_RATIO / 2n;\n\n return (halfRatio + a) / WAD_RAY_RATIO;\n}\n\nexport function wadToRay(a: bigint): bigint {\n return a * WAD_RAY_RATIO;\n}\n\nexport function wadDiv(a: bigint, b: bigint): bigint {\n const halfB = b / 2n;\n\n return (halfB + a * WAD) / b;\n}\n","import { LTV_PRECISION, SECONDS_PER_YEAR } from \"./constants\";\nimport * as RayMath from \"./ray-math\";\n\ninterface CalculateCompoundedInterestRequest {\n rate: bigint;\n currentTimestamp: number;\n lastUpdateTimestamp: number;\n}\n\nexport function calculateCompoundedInterest({\n rate,\n currentTimestamp,\n lastUpdateTimestamp,\n}: CalculateCompoundedInterestRequest): bigint {\n const exp = BigInt(currentTimestamp - lastUpdateTimestamp);\n\n if (exp == 0n) {\n return RayMath.RAY;\n }\n\n const expMinusOne = exp - 1n;\n const expMinusTwo = exp > 2 ? exp - 2n : 0n;\n const basePowerTwo =\n RayMath.rayMul(rate, rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\n const basePowerThree = RayMath.rayMul(basePowerTwo, rate) / SECONDS_PER_YEAR;\n\n const secondTerm = (exp * expMinusOne * basePowerTwo) / 2n;\n const thirdTerm = (exp * expMinusOne * expMinusTwo * basePowerThree) / 6n;\n return RayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\n}\n\ninterface LinearInterestRequest {\n rate: bigint;\n currentTimestamp: number;\n lastUpdateTimestamp: number;\n}\n\nexport function calculateLinearInterest({\n rate,\n currentTimestamp,\n lastUpdateTimestamp,\n}: LinearInterestRequest): bigint {\n return (\n (rate * BigInt(currentTimestamp - lastUpdateTimestamp)) / SECONDS_PER_YEAR +\n RayMath.RAY\n );\n}\n\ninterface NormalizedIncomeRequest {\n rate: bigint;\n index: bigint;\n lastUpdateTimestamp: number;\n currentTimestamp: number;\n}\nexport function getNormalizedIncome({\n rate,\n index,\n lastUpdateTimestamp,\n currentTimestamp,\n}: NormalizedIncomeRequest): bigint {\n if (!rate) {\n return index;\n }\n\n const cumulatedInterest = calculateLinearInterest({\n rate,\n currentTimestamp,\n lastUpdateTimestamp,\n });\n\n return RayMath.rayMul(index, cumulatedInterest);\n}\n\nexport function getNormalizedDebt({\n rate,\n index,\n currentTimestamp,\n lastUpdateTimestamp,\n}: NormalizedIncomeRequest): bigint {\n if (currentTimestamp === lastUpdateTimestamp || rate === 0n) {\n return index;\n }\n return RayMath.rayMul(\n index,\n calculateCompoundedInterest({\n rate,\n currentTimestamp,\n lastUpdateTimestamp,\n }),\n );\n}\n\ninterface CurrentBalanceRequest {\n scaledBalance: bigint;\n index: bigint;\n rate: bigint;\n lastUpdateTimestamp: number;\n currentTimestamp: number;\n}\nexport function getCurrentLiquidityBalance({\n scaledBalance,\n index,\n rate,\n lastUpdateTimestamp,\n currentTimestamp,\n}: CurrentBalanceRequest) {\n if (!scaledBalance) {\n return 0n;\n }\n\n return RayMath.rayToWad(\n RayMath.rayMul(\n RayMath.wadToRay(scaledBalance),\n getNormalizedIncome({\n rate,\n index,\n lastUpdateTimestamp,\n currentTimestamp,\n }),\n ),\n );\n}\n\nexport function getCurrentDebtBalance({\n index,\n scaledBalance,\n rate,\n lastUpdateTimestamp,\n currentTimestamp,\n}: CurrentBalanceRequest): bigint {\n if (!scaledBalance) {\n return 0n;\n }\n\n return RayMath.rayMul(\n scaledBalance,\n getNormalizedDebt({\n index,\n rate,\n currentTimestamp,\n lastUpdateTimestamp,\n }),\n );\n}\n\ninterface HealthFactorFromBalanceRequest {\n collateralBalanceMarketReferenceCurrency: bigint;\n borrowBalanceMarketReferenceCurrency: bigint;\n averageLiquidationThreshold: bigint;\n}\n\n// 1e18 returned means 1HF\nexport function calculateHealthFactorFromBalances({\n borrowBalanceMarketReferenceCurrency,\n collateralBalanceMarketReferenceCurrency,\n averageLiquidationThreshold,\n}: HealthFactorFromBalanceRequest): bigint {\n if (!borrowBalanceMarketReferenceCurrency) {\n return -1n; // Invalid number\n }\n\n return RayMath.wadDiv(\n (collateralBalanceMarketReferenceCurrency * averageLiquidationThreshold) /\n 10n ** LTV_PRECISION,\n borrowBalanceMarketReferenceCurrency,\n );\n}\n\ninterface AvailableBorrowsMarketReferenceCurrencyRequest {\n collateralBalanceMarketReferenceCurrency: bigint;\n borrowBalanceMarketReferenceCurrency: bigint;\n currentLtv: bigint;\n}\n\nexport function calculateAvailableBorrowsMarketReferenceCurrency({\n collateralBalanceMarketReferenceCurrency,\n borrowBalanceMarketReferenceCurrency,\n currentLtv,\n}: AvailableBorrowsMarketReferenceCurrencyRequest): bigint {\n if (!currentLtv) {\n return 0n;\n }\n\n const availableBorrowsMarketReferenceCurrency =\n (collateralBalanceMarketReferenceCurrency * currentLtv) /\n 10n ** LTV_PRECISION -\n borrowBalanceMarketReferenceCurrency;\n return availableBorrowsMarketReferenceCurrency > 0\n ? availableBorrowsMarketReferenceCurrency\n : 0n;\n}\n\ninterface MarketReferenceCurrencyAndUsdBalanceRequest {\n balance: bigint;\n priceInMarketReferenceCurrency: bigint;\n marketReferenceCurrencyDecimals: number;\n decimals: number;\n marketReferencePriceInUsdNormalized: bigint;\n}\n\ninterface MarketReferenceAndUsdBalanceResponse {\n marketReferenceCurrencyBalance: bigint;\n usdBalance: bigint;\n}\n/**\n * @returns non humanized/normalized values for usd/marketReference\n */\nexport function getMarketReferenceCurrencyAndUsdBalance({\n balance,\n priceInMarketReferenceCurrency,\n marketReferenceCurrencyDecimals,\n decimals,\n marketReferencePriceInUsdNormalized,\n}: MarketReferenceCurrencyAndUsdBalanceRequest): MarketReferenceAndUsdBalanceResponse {\n const marketReferenceCurrencyBalance =\n (balance * priceInMarketReferenceCurrency) / BigInt(10 ** decimals);\n const usdBalance =\n (marketReferenceCurrencyBalance * marketReferencePriceInUsdNormalized) /\n BigInt(10 ** marketReferenceCurrencyDecimals);\n return { marketReferenceCurrencyBalance, usdBalance };\n}\n","// AUTOGENERATED - MANUALLY CHANGES WILL BE REVERTED BY THE GENERATOR\nexport const IPayloadsControllerCore_ABI = [\n {\n type: 'function',\n name: 'EXPIRATION_DELAY',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'GRACE_PERIOD',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'MAX_EXECUTION_DELAY',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'MIN_EXECUTION_DELAY',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'cancelPayload',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'createPayload',\n inputs: [\n {\n name: 'actions',\n type: 'tuple[]',\n internalType: 'struct IPayloadsControllerCore.ExecutionAction[]',\n components: [\n {\n name: 'target',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'withDelegateCall',\n type: 'bool',\n internalType: 'bool',\n },\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'value',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'signature',\n type: 'string',\n internalType: 'string',\n },\n {\n name: 'callData',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n },\n ],\n outputs: [\n {\n name: '',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'executePayload',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n outputs: [],\n stateMutability: 'payable',\n },\n {\n type: 'function',\n name: 'getExecutorSettingsByAccessControl',\n inputs: [\n {\n name: 'accessControl',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple',\n internalType: 'struct IPayloadsControllerCore.ExecutorConfig',\n components: [\n {\n name: 'executor',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'delay',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getPayloadById',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple',\n internalType: 'struct IPayloadsControllerCore.Payload',\n components: [\n {\n name: 'creator',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'maximumAccessLevelRequired',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'state',\n type: 'uint8',\n internalType: 'enum IPayloadsControllerCore.PayloadState',\n },\n {\n name: 'createdAt',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'queuedAt',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'executedAt',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'cancelledAt',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'expirationTime',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'delay',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'gracePeriod',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'actions',\n type: 'tuple[]',\n internalType: 'struct IPayloadsControllerCore.ExecutionAction[]',\n components: [\n {\n name: 'target',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'withDelegateCall',\n type: 'bool',\n internalType: 'bool',\n },\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'value',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'signature',\n type: 'string',\n internalType: 'string',\n },\n {\n name: 'callData',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n },\n ],\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getPayloadState',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'uint8',\n internalType: 'enum IPayloadsControllerCore.PayloadState',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getPayloadsCount',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'updateExecutors',\n inputs: [\n {\n name: 'executors',\n type: 'tuple[]',\n internalType: 'struct IPayloadsControllerCore.UpdateExecutorInput[]',\n components: [\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'executorConfig',\n type: 'tuple',\n internalType: 'struct IPayloadsControllerCore.ExecutorConfig',\n components: [\n {\n name: 'executor',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'delay',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n },\n ],\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'event',\n name: 'ExecutorSet',\n inputs: [\n {\n name: 'accessLevel',\n type: 'uint8',\n indexed: true,\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'executor',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'delay',\n type: 'uint40',\n indexed: false,\n internalType: 'uint40',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PayloadCancelled',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n indexed: false,\n internalType: 'uint40',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PayloadCreated',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n indexed: true,\n internalType: 'uint40',\n },\n {\n name: 'creator',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'actions',\n type: 'tuple[]',\n indexed: false,\n internalType: 'struct IPayloadsControllerCore.ExecutionAction[]',\n components: [\n {\n name: 'target',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'withDelegateCall',\n type: 'bool',\n internalType: 'bool',\n },\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'value',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'signature',\n type: 'string',\n internalType: 'string',\n },\n {\n name: 'callData',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n },\n {\n name: 'maximumAccessLevelRequired',\n type: 'uint8',\n indexed: true,\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PayloadExecuted',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n indexed: false,\n internalType: 'uint40',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PayloadExecutionMessageReceived',\n inputs: [\n {\n name: 'originSender',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'originChainId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'delivered',\n type: 'bool',\n indexed: true,\n internalType: 'bool',\n },\n {\n name: 'message',\n type: 'bytes',\n indexed: false,\n internalType: 'bytes',\n },\n {\n name: 'reason',\n type: 'bytes',\n indexed: false,\n internalType: 'bytes',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PayloadQueued',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n indexed: false,\n internalType: 'uint40',\n },\n ],\n anonymous: false,\n },\n] as const;\n","// AUTOGENERATED - MANUALLY CHANGES WILL BE REVERTED BY THE GENERATOR\nexport const IGovernanceCore_ABI = [\n {\n type: 'function',\n name: 'ACHIEVABLE_VOTING_PARTICIPATION',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'CANCELLATION_FEE_COLLECTOR',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'address',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'COOLDOWN_PERIOD',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'MIN_VOTING_DURATION',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'NAME',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'string',\n internalType: 'string',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'PRECISION_DIVIDER',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'PROPOSAL_EXPIRATION_TIME',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'VOTING_TOKENS_CAP',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'activateVoting',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'addVotingPortals',\n inputs: [\n {\n name: 'votingPortals',\n type: 'address[]',\n internalType: 'address[]',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'cancelProposal',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'createProposal',\n inputs: [\n {\n name: 'payloads',\n type: 'tuple[]',\n internalType: 'struct PayloadsControllerUtils.Payload[]',\n components: [\n {\n name: 'chain',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'payloadsController',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'payloadId',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n },\n {\n name: 'votingPortal',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'ipfsHash',\n type: 'bytes32',\n internalType: 'bytes32',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'payable',\n },\n {\n type: 'function',\n name: 'executeProposal',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'getCancellationFee',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getPowerStrategy',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'contract IGovernancePowerStrategy',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getProposal',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple',\n internalType: 'struct IGovernanceCore.Proposal',\n components: [\n {\n name: 'state',\n type: 'uint8',\n internalType: 'enum IGovernanceCore.State',\n },\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'creationTime',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'votingDuration',\n type: 'uint24',\n internalType: 'uint24',\n },\n {\n name: 'votingActivationTime',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'queuingTime',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'cancelTimestamp',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'creator',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'votingPortal',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'snapshotBlockHash',\n type: 'bytes32',\n internalType: 'bytes32',\n },\n {\n name: 'ipfsHash',\n type: 'bytes32',\n internalType: 'bytes32',\n },\n {\n name: 'forVotes',\n type: 'uint128',\n internalType: 'uint128',\n },\n {\n name: 'againstVotes',\n type: 'uint128',\n internalType: 'uint128',\n },\n {\n name: 'cancellationFee',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'payloads',\n type: 'tuple[]',\n internalType: 'struct PayloadsControllerUtils.Payload[]',\n components: [\n {\n name: 'chain',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'payloadsController',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'payloadId',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n },\n ],\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getProposalState',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'uint8',\n internalType: 'enum IGovernanceCore.State',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getProposalsCount',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getRepresentativeByChain',\n inputs: [\n {\n name: 'voter',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'chainId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'address',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getRepresentedVotersByChain',\n inputs: [\n {\n name: 'representative',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'chainId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'address[]',\n internalType: 'address[]',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getVotingConfig',\n inputs: [\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple',\n internalType: 'struct IGovernanceCore.VotingConfig',\n components: [\n {\n name: 'coolDownBeforeVotingStart',\n type: 'uint24',\n internalType: 'uint24',\n },\n {\n name: 'votingDuration',\n type: 'uint24',\n internalType: 'uint24',\n },\n {\n name: 'yesThreshold',\n type: 'uint56',\n internalType: 'uint56',\n },\n {\n name: 'yesNoDifferential',\n type: 'uint56',\n internalType: 'uint56',\n },\n {\n name: 'minPropositionPower',\n type: 'uint56',\n internalType: 'uint56',\n },\n ],\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getVotingPortalsCount',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'isVotingPortalApproved',\n inputs: [\n {\n name: 'votingPortal',\n type: 'address',\n internalType: 'address',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'bool',\n internalType: 'bool',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'queueProposal',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'forVotes',\n type: 'uint128',\n internalType: 'uint128',\n },\n {\n name: 'againstVotes',\n type: 'uint128',\n internalType: 'uint128',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'redeemCancellationFee',\n inputs: [\n {\n name: 'proposalIds',\n type: 'uint256[]',\n internalType: 'uint256[]',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'removeVotingPortals',\n inputs: [\n {\n name: 'votingPortals',\n type: 'address[]',\n internalType: 'address[]',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'rescueVotingPortal',\n inputs: [\n {\n name: 'votingPortal',\n type: 'address',\n internalType: 'address',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'setPowerStrategy',\n inputs: [\n {\n name: 'newPowerStrategy',\n type: 'address',\n internalType: 'contract IGovernancePowerStrategy',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'setVotingConfigs',\n inputs: [\n {\n name: 'votingConfigs',\n type: 'tuple[]',\n internalType: 'struct IGovernanceCore.SetVotingConfigInput[]',\n components: [\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'coolDownBeforeVotingStart',\n type: 'uint24',\n internalType: 'uint24',\n },\n {\n name: 'votingDuration',\n type: 'uint24',\n internalType: 'uint24',\n },\n {\n name: 'yesThreshold',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'yesNoDifferential',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'minPropositionPower',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'updateCancellationFee',\n inputs: [\n {\n name: 'cancellationFee',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'updateRepresentativesForChain',\n inputs: [\n {\n name: 'representatives',\n type: 'tuple[]',\n internalType: 'struct IGovernanceCore.RepresentativeInput[]',\n components: [\n {\n name: 'representative',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'chainId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'event',\n name: 'CancellationFeeRedeemed',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'to',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'cancellationFee',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n {\n name: 'success',\n type: 'bool',\n indexed: true,\n internalType: 'bool',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'CancellationFeeUpdated',\n inputs: [\n {\n name: 'cancellationFee',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PayloadSent',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'payloadId',\n type: 'uint40',\n indexed: false,\n internalType: 'uint40',\n },\n {\n name: 'payloadsController',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'chainId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'payloadNumberOnProposal',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n {\n name: 'numberOfPayloadsOnProposal',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PowerStrategyUpdated',\n inputs: [\n {\n name: 'newPowerStrategy',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'ProposalCanceled',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'ProposalCreated',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'creator',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'accessLevel',\n type: 'uint8',\n indexed: true,\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'ipfsHash',\n type: 'bytes32',\n indexed: false,\n internalType: 'bytes32',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'ProposalExecuted',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'ProposalFailed',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'votesFor',\n type: 'uint128',\n indexed: false,\n internalType: 'uint128',\n },\n {\n name: 'votesAgainst',\n type: 'uint128',\n indexed: false,\n internalType: 'uint128',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'ProposalQueued',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'votesFor',\n type: 'uint128',\n indexed: false,\n internalType: 'uint128',\n },\n {\n name: 'votesAgainst',\n type: 'uint128',\n indexed: false,\n internalType: 'uint128',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'RepresentativeUpdated',\n inputs: [\n {\n name: 'voter',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'representative',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'chainId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'VoteForwarded',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'voter',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'support',\n type: 'bool',\n indexed: true,\n internalType: 'bool',\n },\n {\n name: 'votingAssetsWithSlot',\n type: 'tuple[]',\n indexed: false,\n internalType: 'struct IVotingMachineWithProofs.VotingAssetWithSlot[]',\n components: [\n {\n name: 'underlyingAsset',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'slot',\n type: 'uint128',\n internalType: 'uint128',\n },\n ],\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'VotingActivated',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'snapshotBlockHash',\n type: 'bytes32',\n indexed: true,\n internalType: 'bytes32',\n },\n {\n name: 'votingDuration',\n type: 'uint24',\n indexed: false,\n internalType: 'uint24',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'VotingConfigUpdated',\n inputs: [\n {\n name: 'accessLevel',\n type: 'uint8',\n indexed: true,\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'votingDuration',\n type: 'uint24',\n indexed: false,\n internalType: 'uint24',\n },\n {\n name: 'coolDownBeforeVotingStart',\n type: 'uint24',\n indexed: false,\n internalType: 'uint24',\n },\n {\n name: 'yesThreshold',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n {\n name: 'yesNoDifferential',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n {\n name: 'minPropositionPower',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'VotingPortalUpdated',\n inputs: [\n {\n name: 'votingPortal',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'approved',\n type: 'bool',\n indexed: true,\n internalType: 'bool',\n },\n ],\n anonymous: false,\n },\n] as const;\n","import { IPayloadsControllerCore_ABI } from \"@bgd-labs/aave-address-book/abis\";\nimport {\n Address,\n Client,\n GetContractReturnType,\n Hex,\n TestClient,\n encodePacked,\n getContract,\n} from \"viem\";\nimport { getSolidityStorageSlotUint } from \"../../math/slot\";\nimport { getBlock } from \"viem/actions\";\n\nexport enum PayloadState {\n None = 0,\n Created = 1,\n Queued = 2,\n Executed = 3,\n Cancelled = 4,\n Expired = 5,\n}\n\nexport const HUMAN_READABLE_PAYLOAD_STATE = {\n [PayloadState.None]: \"None\",\n [PayloadState.Created]: \"Created\",\n [PayloadState.Queued]: \"Queued\",\n [PayloadState.Executed]: \"Executed\",\n [PayloadState.Cancelled]: \"Cancelled\",\n [PayloadState.Expired]: \"Expired\",\n};\n\nexport type PayloadsControllerContract = GetContractReturnType<\n typeof IPayloadsControllerCore_ABI,\n Client\n>;\n\nexport function getPayloadsController<T extends Client>(\n client: T,\n address: Hex,\n): PayloadsControllerContract {\n return getContract({\n abi: IPayloadsControllerCore_ABI,\n client,\n address,\n });\n}\n\nexport async function makePayloadExecutableOnTestClient(\n client: TestClient,\n payloadsController: Address,\n payloadId: number,\n) {\n const controllerContract = getPayloadsController(client, payloadsController);\n const payload = await controllerContract.read.getPayloadById([payloadId]);\n const currentBlock = await getBlock(client);\n return client.setStorageAt({\n address: payloadsController,\n // 3 is the slot of the payloads mapping\n index: getSolidityStorageSlotUint(3n, BigInt(payloadId)),\n value: encodePacked(\n [\"uint40\", \"uint40\", \"uint8\", \"uint8\", \"address\"],\n [\n // we subtract 240n(4min), as tenderly might have been fallen behind\n // therefore using block_number -1 (latest on tenderly) and a 4min margin should give a save margin\n Number(currentBlock.timestamp - BigInt(payload.delay) - 1n - 240n), // altering queued time so can be executed in current block\n payload.createdAt,\n PayloadState.Queued,\n payload.maximumAccessLevelRequired,\n payload.creator,\n ],\n ),\n });\n}\n\nexport async function getNonFinalizedPayloads<T extends Client>(\n client: T,\n payloadsController: Address,\n): Promise<number[]> {\n const controllerContract = getPayloadsController(client, payloadsController);\n const payloadsCount = await controllerContract.read.getPayloadsCount();\n const nonFinalPayloads: number[] = [];\n for (let payloadId = payloadsCount - 1; payloadId != 0; payloadId--) {\n // controllerContract.read.EXPIRATION_DELAY(), controllerContract.read.MAX_EXECUTION_DELAY(), controllerContract.read.GRACE_PERIOD()\n const maxRange = (35 + 10 + 7) * 24 * 60 * 60;\n const payload = await controllerContract.read.getPayloadById([payloadId]);\n if ([PayloadState.Queued, PayloadState.Created].includes(payload.state))\n nonFinalPayloads.push(payloadId);\n // If the payload was created longer then maxRange in the past, we now everything that was created before will be expired as well\n if (payload.createdAt < Date.now() / 1000 - maxRange) break;\n }\n return nonFinalPayloads;\n}\n","import {\n type Hex,\n concat,\n encodeAbiParameters,\n fromHex,\n getAddress,\n keccak256,\n pad,\n parseAbiParameters,\n slice,\n toBytes,\n toHex,\n trim,\n} from \"viem\";\n/**\n * @notice Returns the storage slot for a Solidity mapping with bytes32 keys, given the slot of the mapping itself\n * @dev Read more at https://docs.soliditylang.org/en/latest/internals/layout_in_storage.html#mappings-and-dynamic-arrays\n * @param mappingSlot Mapping slot in storage\n * @param key Mapping key to find slot for\n * @returns Storage slot\n */\nexport function getSolidityStorageSlotBytes(mappingSlot: Hex, key: Hex) {\n const slot = pad(mappingSlot, { size: 32 });\n return trim(\n keccak256(\n encodeAbiParameters(parseAbiParameters(\"bytes32, uint256\"), [\n key,\n BigInt(slot),\n ]),\n ),\n );\n}\n\n/**\n * @notice Returns the storage slot for a Solidity mapping with uint keys, given the slot of the mapping itself\n * @dev Read more at https://docs.soliditylang.org/en/latest/internals/layout_in_storage.html#mappings-and-dynamic-arrays\n * @param mappingSlot Mapping slot in storage\n * @param key Mapping key to find slot for\n * @returns Storage slot\n */\nexport function getSolidityStorageSlotUint(mappingSlot: bigint, key: bigint) {\n return keccak256(\n encodeAbiParameters(parseAbiParameters(\"uint256, uint256\"), [\n key,\n mappingSlot,\n ]),\n );\n}\n\nexport function getSolidityStorageSlotAddress(\n mappingSlot: bigint | number,\n key: Hex,\n) {\n return keccak256(\n encodeAbiParameters(parseAbiParameters(\"address, uint256\"), [\n key,\n BigInt(mappingSlot),\n ]),\n );\n}\n\n/**\n * Returns the slot of an array item\n * @param baseSlot baseSlot of the array size pointer\n * @param arrayIndex index within the array\n * @param itemSize number of slots consumed per array item\n * @returns\n */\nexport function getDynamicArraySlot(\n baseSlot: bigint,\n arrayIndex: number,\n itemSize: number,\n): Hex {\n return pad(\n toHex(\n fromHex(\n keccak256(\n encodeAbiParameters(parseAbiParameters(\"uint256\"), [baseSlot]),\n ),\n \"bigint\",\n ) + BigInt(arrayIndex * itemSize),\n ),\n { size: 32 },\n );\n}\n\n/**\n * https://ethereum.stackexchange.com/questions/107282/storage-and-memory-layout-of-strings\n * @param value string | bytes\n */\nexport function getBytesValue(value: string | Hex) {\n const bytesString = toBytes(value);\n if (bytesString.length > 31)\n throw new Error(\"Error: strings > 31 bytes are not implemented\");\n return concat([\n toHex(pad(bytesString, { size: 31, dir: \"right\" })),\n toHex(bytesString.length * 2, { size: 1 }),\n ]);\n}\n\nexport function bytes32ToAddress(bytes32: Hex) {\n return getAddress(slice(bytes32, 12, 32));\n}\n","import { IGovernanceCore_ABI } from \"@bgd-labs/aave-address-book/abis\";\nimport {\n Address,\n Client,\n fromHex,\n getContract,\n GetContractReturnType,\n Hex,\n TestClient,\n toHex,\n} from \"viem\";\nimport { getBlock, getStorageAt } from \"viem/actions\";\nimport { getSolidityStorageSlotUint } from \"../../math/slot\";\nimport { setBits } from \"../../math/binary\";\n\nexport enum ProposalState {\n Null = 0, // proposal does not exists\n Created = 1, // created, waiting for a cooldown to initiate the balances snapshot\n Active = 2, // balances snapshot set, voting in progress\n Queued = 3, // voting results submitted, but proposal is under grace period when guardian can cancel it\n Executed = 4, // results sent to the execution chain(s)\n Failed = 5, // voting was not successful\n Cancelled = 6, // got cancelled by guardian, or because proposition power of creator dropped below allowed minimum\n Expired = 7,\n}\n\nexport const HUMAN_READABLE_PROPOSAL_STATE = {\n [ProposalState.Null]: \"Null\",\n [ProposalState.Created]: \"Created\",\n [ProposalState.Active]: \"Active\",\n [ProposalState.Queued]: \"Queued\",\n [ProposalState.Executed]: \"Executed\",\n [ProposalState.Failed]: \"Failed\",\n [ProposalState.Cancelled]: \"Cancelled\",\n [ProposalState.Expired]: \"Expired\",\n};\n\nexport type GovernanceContract = GetContractReturnType<\n typeof IGovernanceCore_ABI,\n Client\n>;\n\nexport function getGovernance<T extends Client>(\n client: T,\n address: Hex,\n): GovernanceContract {\n return getContract({\n abi: IGovernanceCore_ABI,\n client,\n address,\n });\n}\n\nexport async function makeProposalExecutableOnTestClient(\n client: TestClient,\n governance: Address,\n proposalId: bigint,\n) {\n const currentBlock = await getBlock(client);\n // 7n is the base slot of the proposal mapping\n const proposalSlot = getSolidityStorageSlotUint(7n, proposalId);\n const data = await getStorageAt(client, {\n address: governance,\n slot: proposalSlot,\n });\n let manipulatedStorage = fromHex(data!, { to: \"bigint\" });\n // set queued\n manipulatedStorage = setBits(\n manipulatedStorage,\n 0n,\n 8n,\n ProposalState.Queued,\n );\n // set creation time\n manipulatedStorage = setBits(\n manipulatedStorage,\n 16n,\n 56n,\n currentBlock.timestamp - 2592000n, // (await governanceContract.read.PROPOSAL_EXPIRATION_TIME())\n );\n return client.setStorageAt({\n address: governance,\n // 3 is the slot of the payloads mapping\n index: proposalSlot,\n value: toHex(manipulatedStorage, { size: 32 }),\n });\n}\n\nexport async function getNonFinalizedProposals<T extends Client>(\n client: T,\n governanceAddress: Address,\n): Promise<bigint[]> {\n const goverannceContract = getGovernance(client, governanceAddress);\n const proposalsCount = await goverannceContract.read.getProposalsCount();\n const nonFinalProposals: bigint[] = [];\n for (let proposalId = proposalsCount - 1n; proposalId != 0n; proposalId--) {\n const proposal = await goverannceContract.read.getProposal([proposalId]);\n if (\n [\n ProposalState.Queued,\n ProposalState.Created,\n ProposalState.Active,\n ].includes(proposal.state)\n )\n nonFinalProposals.push(proposalId);\n // If the payload was created longer then expiration time in the past we no longer care\n if (proposal.creationTime < Date.now() / 1000 - 2592000) break;\n }\n return nonFinalProposals;\n}\n","// AUTOGENERATED: DO NOT MANUALLY EDIT THIS FILE\nexport const etherscanExplorers = {\n 1: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://etherscan.io\"\n },\n 10: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://optimistic.etherscan.io/\"\n },\n 25: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://cronoscan.com\"\n },\n 50: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://xdcscan.com/\"\n },\n 51: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.xdcscan.com/\"\n },\n 56: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://bscscan.com\"\n },\n 97: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.bscscan.com\"\n },\n 100: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://gnosisscan.io/\"\n },\n 130: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://uniscan.xyz/\"\n },\n 137: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://polygonscan.com\"\n },\n 146: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sonicscan.org/\"\n },\n 199: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://bttcscan.com/\"\n },\n 204: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://opbnb.bscscan.com/\"\n },\n 250: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://ftmscan.com\"\n },\n 252: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://fraxscan.com/\"\n },\n 255: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://kromascan.com/\"\n },\n 300: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia-era.zksync.network/\"\n },\n 324: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://era.zksync.network/\"\n },\n 480: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://worldscan.org/\"\n },\n 1028: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.bttcscan.com/\"\n },\n 1101: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://zkevm.polygonscan.com/\"\n },\n 1111: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://wemixscan.com/\"\n },\n 1112: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.wemixscan.com/\"\n },\n 1284: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://moonbeam.moonscan.io/\"\n },\n 1285: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://moonriver.moonscan.io/\"\n },\n 1287: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://moonbase.moonscan.io/\"\n },\n 1301: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.uniscan.xyz/\"\n },\n 2358: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.kromascan.com/\"\n },\n 2442: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://cardona-zkevm.polygonscan.com/\"\n },\n 2522: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://holesky.fraxscan.com/\"\n },\n 2741: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://abscan.org/\"\n },\n 4002: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.ftmscan.com/\"\n },\n 4801: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.worldscan.org/\"\n },\n 5000: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://mantlescan.xyz/\"\n },\n 5003: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.mantlescan.xyz/\"\n },\n 5611: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://opbnb-testnet.bscscan.com/\"\n },\n 8453: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://basescan.org\"\n },\n 11124: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.abscan.org/\"\n },\n 17000: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.etherscan.io\"\n },\n 33111: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://curtis.apescan.io/\"\n },\n 33139: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://apescan.io/\"\n },\n 42161: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://arbiscan.io\"\n },\n 42170: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://nova.arbiscan.io/\"\n },\n 42220: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://celoscan.io\"\n },\n 43113: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.snowscan.xyz/\"\n },\n 43114: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://snowscan.xyz/\"\n },\n 44787: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://alfajores.celoscan.io/\"\n },\n 50104: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sophscan.xyz/\"\n },\n 57054: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.sonicscan.org/\"\n },\n 59141: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.lineascan.build/\"\n },\n 59144: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://lineascan.build/\"\n },\n 80002: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://amoy.polygonscan.com/\"\n },\n 80094: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://berascan.com/\"\n },\n 81457: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://blastscan.io/\"\n },\n 84532: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.basescan.org/\"\n },\n 167000: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://taikoscan.io/\"\n },\n 167009: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://hekla.taikoscan.io/\"\n },\n 421614: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.arbiscan.io/\"\n },\n 534351: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.scrollscan.com/\"\n },\n 534352: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://scrollscan.com/\"\n },\n 660279: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://xaiscan.io/\"\n },\n 11155111: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.etherscan.io\"\n },\n 11155420: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia-optimism.etherscan.io/\"\n },\n 168587773: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.blastscan.io/\"\n },\n 531050104: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.sophscan.xyz/\"\n },\n 37714555429: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.xaiscan.io/\"\n }\n} as const;","// AUTOGENERATED: DO NOT MANUALLY EDIT THIS FILE\nexport const routescanExplorers = {\n 1: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/1/etherscan\",\n explorer: \"1.routescan.io\"\n },\n 10: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/10/etherscan\",\n explorer: \"10.routescan.io\"\n },\n 14: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/14/etherscan\",\n explorer: \"14.routescan.io\"\n },\n 16: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/16/etherscan\",\n explorer: \"16.routescan.io\"\n },\n 19: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/19/etherscan\",\n explorer: \"19.routescan.io\"\n },\n 56: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/56/etherscan\",\n explorer: \"56.routescan.io\"\n },\n 97: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/97/etherscan\",\n explorer: \"97.routescan.io\"\n },\n 114: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/114/etherscan\",\n explorer: \"114.routescan.io\"\n },\n 146: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/146/etherscan\",\n explorer: \"146.routescan.io\"\n },\n 151: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/151/etherscan\",\n explorer: \"151.routescan.io\"\n },\n 166: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/166/etherscan\",\n explorer: \"166.routescan.io\"\n },\n 169: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/169/etherscan\",\n explorer: \"169.routescan.io\"\n },\n 183: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/183/etherscan\",\n explorer: \"183.routescan.io\"\n },\n 185: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/185/etherscan\",\n explorer: \"185.routescan.io\"\n },\n 233: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/233/etherscan\",\n explorer: \"233.routescan.io\"\n },\n 252: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/252/etherscan\",\n explorer: \"252.routescan.io\"\n },\n 254: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/254/etherscan\",\n explorer: \"254.routescan.io\"\n },\n 255: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/255/etherscan\",\n explorer: \"255.routescan.io\"\n },\n 288: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/288/etherscan\",\n explorer: \"288.routescan.io\"\n },\n 291: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/291/etherscan\",\n explorer: \"291.routescan.io\"\n },\n 301: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/301/etherscan\",\n explorer: \"301.routescan.io\"\n },\n 303: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/303/etherscan\",\n explorer: \"303.routescan.io\"\n },\n 324: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/324/etherscan\",\n explorer: \"324.routescan.io\"\n },\n 335: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/335/etherscan\",\n explorer: \"335.routescan.io\"\n },\n 357: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/357/etherscan\",\n explorer: \"357.routescan.io\"\n },\n 480: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/480/etherscan\",\n explorer: \"480.routescan.io\"\n },\n 719: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/719/etherscan\",\n explorer: \"719.routescan.io\"\n },\n 749: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/749/etherscan\",\n explorer: \"749.routescan.io\"\n },\n 919: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/919/etherscan\",\n explorer: \"919.routescan.io\"\n },\n 1010: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/1010/etherscan\",\n explorer: \"1010.routescan.io\"\n },\n 1088: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/1088/etherscan\",\n explorer: \"1088.routescan.io\"\n },\n 1135: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/1135/etherscan\",\n explorer: \"1135.routescan.io\"\n },\n 1234: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/1234/etherscan\",\n explorer: \"1234.routescan.io\"\n },\n 1294: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/1294/etherscan\",\n explorer: \"1294.routescan.io\"\n },\n 1301: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/1301/etherscan\",\n explorer: \"1301.routescan.io\"\n },\n 1687: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/1687/etherscan\",\n explorer: \"1687.routescan.io\"\n },\n 1853: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/1853/etherscan\",\n explorer: \"1853.routescan.io\"\n },\n 1923: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/1923/etherscan\",\n explorer: \"1923.routescan.io\"\n },\n 1946: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/1946/etherscan\",\n explorer: \"1946.routescan.io\"\n },\n 2037: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/2037/etherscan\",\n explorer: \"2037.routescan.io\"\n },\n 2044: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/2044/etherscan\",\n explorer: \"2044.routescan.io\"\n },\n 2233: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/2233/etherscan\",\n explorer: \"2233.routescan.io\"\n },\n 2358: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/2358/etherscan\",\n explorer: \"2358.routescan.io\"\n },\n 2522: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/2522/etherscan\",\n explorer: \"2522.routescan.io\"\n },\n 2818: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/2818/etherscan\",\n explorer: \"2818.routescan.io\"\n },\n 3011: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/3011/etherscan\",\n explorer: \"3011.routescan.io\"\n },\n 3012: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/3012/etherscan\",\n explorer: \"3012.routescan.io\"\n },\n 3636: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/3636/etherscan\",\n explorer: \"3636.routescan.io\"\n },\n 3939: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/3939/etherscan\",\n explorer: \"3939.routescan.io\"\n },\n 4202: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/4202/etherscan\",\n explorer: \"4202.routescan.io\"\n },\n 4337: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/4337/etherscan\",\n explorer: \"4337.routescan.io\"\n },\n 4460: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/4460/etherscan\",\n explorer: \"4460.routescan.io\"\n },\n 4801: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/4801/etherscan\",\n explorer: \"4801.routescan.io\"\n },\n 5000: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/5000/etherscan\",\n explorer: \"5000.routescan.io\"\n },\n 5330: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/5330/etherscan\",\n explorer: \"5330.routescan.io\"\n },\n 5566: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/5566/etherscan\",\n explorer: \"5566.routescan.io\"\n },\n 6119: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/6119/etherscan\",\n explorer: \"6119.routescan.io\"\n },\n 6900: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/6900/etherscan\",\n explorer: \"6900.routescan.io\"\n },\n 6911: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/6911/etherscan\",\n explorer: \"6911.routescan.io\"\n },\n 7171: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/7171/etherscan\",\n explorer: \"7171.routescan.io\"\n },\n 7210: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/7210/etherscan\",\n explorer: \"7210.routescan.io\"\n },\n 7222: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/7222/etherscan\",\n explorer: \"7222.routescan.io\"\n },\n 7560: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/7560/etherscan\",\n explorer: \"7560.routescan.io\"\n },\n 7700: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/7700/etherscan\",\n explorer: \"7700.routescan.io\"\n },\n 7887: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/7887/etherscan\",\n explorer: \"7887.routescan.io\"\n },\n 7979: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/7979/etherscan\",\n explorer: \"7979.routescan.io\"\n },\n 8008: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/8008/etherscan\",\n explorer: \"8008.routescan.io\"\n },\n 8082: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/8082/etherscan\",\n explorer: \"8082.routescan.io\"\n },\n 8453: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/8453/etherscan\",\n explorer: \"8453.routescan.io\"\n },\n 8888: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/8888/etherscan\",\n explorer: \"8888.routescan.io\"\n },\n 9728: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/9728/etherscan\",\n explorer: \"9728.routescan.io\"\n },\n 10507: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/10507/etherscan\",\n explorer: \"10507.routescan.io\"\n },\n 10849: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/10849/etherscan\",\n explorer: \"10849.routescan.io\"\n },\n 10880: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/10880/etherscan\",\n explorer: \"10880.routescan.io\"\n },\n 10888: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/10888/etherscan\",\n explorer: \"10888.routescan.io\"\n },\n 11124: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/11124/etherscan\",\n explorer: \"11124.routescan.io\"\n },\n 12150: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/12150/etherscan\",\n explorer: \"12150.routescan.io\"\n },\n 17000: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/17000/etherscan\",\n explorer: \"17000.routescan.io\"\n },\n 26659: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/26659/etherscan\",\n explorer: \"26659.routescan.io\"\n },\n 28882: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/28882/etherscan\",\n explorer: \"28882.routescan.io\"\n },\n 31335: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/31335/etherscan\",\n explorer: \"31335.routescan.io\"\n },\n 34443: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/34443/etherscan\",\n explorer: \"34443.routescan.io\"\n },\n 42026: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/42026/etherscan\",\n explorer: \"42026.routescan.io\"\n },\n 42069: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/42069/etherscan\",\n explorer: \"42069.routescan.io\"\n },\n 42161: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/42161/etherscan\",\n explorer: \"42161.routescan.io\"\n },\n 43113: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/43113/etherscan\",\n explorer: \"43113.routescan.io\"\n },\n 43114: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/43114/etherscan\",\n explorer: \"43114.routescan.io\"\n },\n 43288: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/43288/etherscan\",\n explorer: \"43288.routescan.io\"\n },\n 48795: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/48795/etherscan\",\n explorer: \"48795.routescan.io\"\n },\n 49321: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/49321/etherscan\",\n explorer: \"49321.routescan.io\"\n },\n 53123: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/53123/etherscan\",\n explorer: \"53123.routescan.io\"\n },\n 53302: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/53302/etherscan\",\n explorer: \"53302.routescan.io\"\n },\n 53935: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/53935/etherscan\",\n explorer: \"53935.routescan.io\"\n },\n 55551: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/55551/etherscan\",\n explorer: \"55551.routescan.io\"\n },\n 56288: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/56288/etherscan\",\n explorer: \"56288.routescan.io\"\n },\n 57054: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/57054/etherscan\",\n explorer: \"57054.routescan.io\"\n },\n 57073: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/57073/etherscan\",\n explorer: \"57073.routescan.io\"\n },\n 60118: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/60118/etherscan\",\n explorer: \"60118.routescan.io\"\n },\n 62707: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/62707/etherscan\",\n explorer: \"62707.routescan.io\"\n },\n 70800: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/70800/etherscan\",\n explorer: \"70800.routescan.io\"\n },\n 70953: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/70953/etherscan\",\n explorer: \"70953.routescan.io\"\n },\n 78170: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/78170/etherscan\",\n explorer: \"78170.routescan.io\"\n },\n 80000: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/80000/etherscan\",\n explorer: \"80000.routescan.io\"\n },\n 80002: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/80002/etherscan\",\n explorer: \"80002.routescan.io\"\n },\n 80008: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/80008/etherscan\",\n explorer: \"80008.routescan.io\"\n },\n 80069: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/80069/etherscan\",\n explorer: \"80069.routescan.io\"\n },\n 80084: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/80084/etherscan\",\n explorer: \"80084.routescan.io\"\n },\n 80085: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/80085/etherscan\",\n explorer: \"80085.routescan.io\"\n },\n 80094: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/80094/etherscan\",\n explorer: \"80094.routescan.io\"\n },\n 81457: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/81457/etherscan\",\n explorer: \"81457.routescan.io\"\n },\n 84532: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/84532/etherscan\",\n explorer: \"84532.routescan.io\"\n },\n 88882: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/88882/etherscan\",\n explorer: \"88882.routescan.io\"\n },\n 88888: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/88888/etherscan\",\n explorer: \"88888.routescan.io\"\n },\n 124832: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/124832/etherscan\",\n explorer: \"124832.routescan.io\"\n },\n 167000: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/167000/etherscan\",\n explorer: \"167000.routescan.io\"\n },\n 167008: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/167008/etherscan\",\n explorer: \"167008.routescan.io\"\n },\n 167009: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/167009/etherscan\",\n explorer: \"167009.routescan.io\"\n },\n 173750: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/173750/etherscan\",\n explorer: \"173750.routescan.io\"\n },\n 421614: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/421614/etherscan\",\n explorer: \"421614.routescan.io\"\n },\n 432201: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/432201/etherscan\",\n explorer: \"432201.routescan.io\"\n },\n 432204: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/432204/etherscan\",\n explorer: \"432204.routescan.io\"\n },\n 504441: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/504441/etherscan\",\n explorer: \"504441.routescan.io\"\n },\n 555666: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/555666/etherscan\",\n explorer: \"555666.routescan.io\"\n },\n 710420: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/710420/etherscan\",\n explorer: \"710420.routescan.io\"\n },\n 763373: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/763373/etherscan\",\n explorer: \"763373.routescan.io\"\n },\n 779672: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/779672/etherscan\",\n explorer: \"779672.routescan.io\"\n },\n 999999: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/999999/etherscan\",\n explorer: \"999999.routescan.io\"\n },\n 1398243: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/1398243/etherscan\",\n explorer: \"1398243.routescan.io\"\n },\n 3397901: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/3397901/etherscan\",\n explorer: \"3397901.routescan.io\"\n },\n 7777777: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/7777777/etherscan\",\n explorer: \"7777777.routescan.io\"\n },\n 11155111: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/11155111/etherscan\",\n explorer: \"11155111.routescan.io\"\n },\n 11155420: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/11155420/etherscan\",\n explorer: \"11155420.routescan.io\"\n },\n 11155931: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/11155931/etherscan\",\n explorer: \"11155931.routescan.io\"\n },\n 12345678: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/12345678/etherscan\",\n explorer: \"12345678.routescan.io\"\n },\n 13068200: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/13068200/etherscan\",\n explorer: \"13068200.routescan.io\"\n },\n 20240603: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/20240603/etherscan\",\n explorer: \"20240603.routescan.io\"\n },\n 20241133: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/20241133/etherscan\",\n explorer: \"20241133.routescan.io\"\n },\n 21000000: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/21000000/etherscan\",\n explorer: \"21000000.routescan.io\"\n },\n 21000001: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/21000001/etherscan\",\n explorer: \"21000001.routescan.io\"\n },\n 28122024: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/28122024/etherscan\",\n explorer: \"28122024.routescan.io\"\n },\n 111557560: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/111557560/etherscan\",\n explorer: \"111557560.routescan.io\"\n },\n 168587773: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/168587773/etherscan\",\n explorer: \"168587773.routescan.io\"\n },\n 333000333: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/333000333/etherscan\",\n explorer: \"333000333.routescan.io\"\n },\n 420120000: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/420120000/etherscan\",\n explorer: \"420120000.routescan.io\"\n },\n 420120001: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/420120001/etherscan\",\n explorer: \"420120001.routescan.io\"\n },\n 686669576: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/686669576/etherscan\",\n explorer: \"686669576.routescan.io\"\n },\n 888888888: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/888888888/etherscan\",\n explorer: \"888888888.routescan.io\"\n },\n 999999999: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/999999999/etherscan\",\n explorer: \"999999999.routescan.io\"\n },\n 920637907288165: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/920637907288165/etherscan\",\n explorer: \"920637907288165.routescan.io\"\n }\n} as const;","import { Address, Hex } from \"viem\";\nimport { etherscanExplorers } from \"./generated/etherscanExplorers\";\nimport { routescanExplorers } from \"./generated/routescanExplorers\";\n\nexport type ExplorerConfig = { api: string; explorer: string };\n\n/**\n * Fetches what we consider the \"best\" explorer for a given chain.\n * For our tooling we have a opinionated priorization for explorers:\n * 1. Etherscan\n * 2. Routescan\n * 3. Blockscout and others\n * @param chainId Id of the chain to fetch the explorer for\n */\nexport function getExplorer(chainId: number): ExplorerConfig {\n const etherscan =\n etherscanExplorers[chainId as keyof typeof etherscanExplorers];\n if (etherscan) return etherscan;\n const routescan =\n routescanExplorers[chainId as keyof typeof routescanExplorers];\n if (routescan) return routescan;\n throw new Error(`No explorer found for chainId: ${chainId}`);\n}\n\ntype GetSourceCodeParams = {\n chainId: number;\n address: Address;\n apiUrl?: string;\n apiKey?: string;\n};\n\nexport async function getSourceCode(params: GetSourceCodeParams) {\n const payload = {\n chainid: String(params.chainId),\n address: params.address,\n module: \"contract\",\n action: \"getsourcecode\",\n };\n if (params.apiKey) (payload as any).apikey = params.apiKey;\n const formattedPayload = new URLSearchParams(payload).toString();\n const url = `${params.apiUrl ? params.apiUrl : getExplorer(params.chainId).api}?${formattedPayload}`;\n const request = await fetch(url);\n const { status, message, result } = (await request.json()) as {\n message: string;\n result: {\n ABI: any;\n CompilerVersion: string;\n ConstructorArguments: Hex;\n ContractName: string;\n EVMVersion: string;\n Implementation: Address;\n Library: string;\n LicenseType: string;\n OptimizationUsed: string;\n Proxy: string; // \"1\" meaning true (i think)\n Runs: string;\n SimilarMatch: string;\n SourceCode: string;\n }[];\n status: string;\n };\n if (status != \"1\") {\n throw new Error(result as unknown as string);\n }\n return result[0];\n}\n\nexport function parseEtherscanStyleSourceCode(sourceCode: string): {\n language: string;\n libraries: any;\n settings: {\n evmVersion: string;\n optimizer: { enabled: boolean; runs: number };\n };\n sources: Record<string, { content: string }>;\n} {\n // Handling possible variations in SourceCode format\n if (sourceCode.startsWith(\"{{\") && sourceCode.endsWith(\"}}\")) {\n // Strip the extra curly braces and parse\n sourceCode = sourceCode.substring(1, sourceCode.length - 1);\n }\n return JSON.parse(sourceCode);\n}\n","/**\n * While tenderly is a fenomanal tool for testing, it is not always easy to use as there are minor bugs and small nuances to consider everywhere.\n * This is a simple wrapper around the tenderly APIs.\n */\nimport {\n Hex,\n TestClient,\n WalletClient,\n createTestClient,\n createWalletClient,\n http,\n} from \"viem\";\n\ntype TenderlyConfig = {\n accountSlug: string;\n projectSlug: string;\n accessToken: string;\n};\n\ntype Tenderly_createVnetParams = {\n slug: string;\n displayName: string;\n baseChainId: number;\n forkChainId: number;\n blockNumber?: Hex;\n};\n\nexport type Tenderly_createVnetParamsResponse = {\n id: string;\n slug: string;\n display_name: number;\n fork_config: { network_id: number; block_number: Hex };\n virtual_network_config: {\n chain_config: { chain_id: number };\n accounts: { address: string }[];\n };\n rpcs: [\n { url: string; name: \"Admin RPC\" },\n { url: string; name: \"Public RPC\" },\n ];\n};\n\nconst TENDERLY_BASE_URL = \"https://api.tenderly.co/api/v1\";\n\nexport async function tenderly_createVnet(\n {\n slug,\n displayName,\n baseChainId,\n forkChainId,\n blockNumber,\n }: Tenderly_createVnetParams,\n { accessToken, accountSlug, projectSlug }: TenderlyConfig,\n) {\n if (!accessToken) throw new Error(\"Tenderly access token not provided\");\n if (!accountSlug) throw new Error(\"Tenderly account slug not provided\");\n if (!projectSlug) throw new Error(\"Tenderly project slug not provided\");\n const body = {\n slug: slug,\n display_name: displayName,\n fork_config: {\n network_id: baseChainId,\n ...(blockNumber ? { block_number: blockNumber } : {}),\n },\n virtual_network_config: {\n chain_config: {\n chain_id: forkChainId,\n },\n },\n sync_state_config: {\n enabled: false,\n },\n explorer_page_config: {\n enabled: false,\n verification_visibility: \"bytecode\",\n },\n };\n\n const response = await fetch(\n `${TENDERLY_BASE_URL}/account/${accountSlug}/project/${projectSlug}/vnets`,\n {\n method: \"POST\",\n body: JSON.stringify(body),\n headers: new Headers({\n \"Content-Type\": \"application/json\",\n \"X-Access-Key\": accessToken,\n }),\n },\n );\n const json = (await response.json()) as Tenderly_createVnetParamsResponse;\n if ((json as any).error) {\n console.info((json as any).error);\n throw new Error(\"Tenderly vnet could not be created\");\n }\n return {\n vnet: json,\n testClient: createTestClient({\n mode: \"tenderly\" as any,\n transport: http(json.rpcs[0].url),\n }) as TestClient,\n walletClient: createWalletClient({\n chain: { id: forkChainId } as any,\n account: \"0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9\",\n transport: http(json.rpcs[0].url),\n }) as WalletClient,\n simulate: (body: any) => {\n return fetch(\n // Note: this is subject to change and currently uses the internal api of tenderly\n `${TENDERLY_BASE_URL}/account/${accountSlug}/project/${projectSlug}/testnet/${json.id}/simulate`,\n {\n method: \"POST\",\n body: JSON.stringify(body),\n headers: new Headers({\n \"Content-Type\": \"application/json\",\n \"X-Access-Key\": accessToken,\n }),\n },\n );\n },\n delete: () => {\n return fetch(\n `${TENDERLY_BASE_URL}/account/${accountSlug}/project/${projectSlug}/vnets/${json.id}`,\n {\n method: \"DELETE\",\n headers: new Headers({\n \"Content-Type\": \"application/json\",\n \"X-Access-Key\": accessToken,\n }),\n },\n );\n },\n };\n}\n","export const erc1967_ImplementationSlot =\n \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\";\nexport const erc1967_AdminSlot =\n \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\";\n","import { createPatch, createTwoFilesPatch } from \"diff\";\nimport { format } from \"prettier/standalone\";\nimport solidityPlugin from \"prettier-plugin-solidity/standalone\";\nimport { parseEtherscanStyleSourceCode } from \"../ecosystem/explorers\";\n\nconst prettierOptions = { parser: \"solidity-parse\", plugins: [solidityPlugin] };\n\nexport async function diffCode(codeBefore: string, codeAfter: string) {\n const before = parseEtherscanStyleSourceCode(codeBefore);\n const after = parseEtherscanStyleSourceCode(codeAfter);\n const changes: Record<string, string> = {};\n\n // diff settings\n const settingsBefore = JSON.stringify(before.settings, null, 2);\n const settingsAfter = JSON.stringify(after.settings, null, 2);\n if (settingsBefore !== settingsAfter)\n changes.settings = createPatch(\"settings\", settingsBefore, settingsAfter);\n const contractsBefore = await Promise.all(\n Object.entries(before.sources).map(async ([path, source]) => [\n path.replace(/^.*[\\\\/]/, \"\"),\n path,\n await format(source.content, prettierOptions),\n ]),\n );\n const contractsAfter = await Promise.all(\n Object.entries(after.sources).map(async ([path, source]) => [\n path.replace(/^.*[\\\\/]/, \"\"),\n path,\n await format(source.content, prettierOptions),\n ]),\n );\n for (const [name, path, source] of contractsBefore) {\n const indexAfter = contractsAfter.findIndex(([_name]) => _name === name);\n // removed\n if (indexAfter === -1) {\n changes[name] = createPatch(path, source, \"\");\n } else {\n if (source !== contractsAfter[indexAfter][2])\n changes[name] = createTwoFilesPatch(\n path,\n contractsAfter[indexAfter][1],\n source,\n contractsAfter[indexAfter][2],\n );\n }\n }\n for (const [name, path, source] of contractsAfter) {\n const indexAfter = contractsBefore.findIndex(([_name]) => _name === name);\n // removed\n if (indexAfter === -1) {\n changes[name] = createPatch(path, \"\", source);\n }\n }\n return changes;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACWO,SAAS,gBAAgB,QAA0B;AACxD,QAAM,UAAoB,CAAC;AAC3B,WAAS,IAAI,GAAG,UAAU,IAAI,KAAK;AACjC,QAAI,SAAS,KAAM,SAAQ,KAAK,CAAC;AACjC,aAAS,UAAU;AAAA,EACrB;AACA,SAAO;AACT;AASO,SAAS,QACd,SACA,UACA,SACQ;AACR,MAAI,SAAS;AACb,MAAI,WAAW,QAAQ;AACrB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,YAAY,OAAO,QAAQ,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE;AACzD,MAAI,UAAU,WAAW;AACvB,aAAS,OAAO,YAAY,CAAC;AAAA,EAC/B;AAEA,QAAM,QAAQ,MAAO,SAAS,WAAW,MAAO;AAChD,SAAQ,WAAW,WAAY;AACjC;AAUO,SAAS,QACd,OACA,UACA,QACA,cACA;AACA,QAAM,qBAAqB,OAAO,YAAY;AAG9C,MAAI,OAAO,OAAO,CAAC;AACnB,WAAS,IAAI,UAAU,IAAI,SAAS,IAAI,KAAK;AAC3C,YAAQ,OAAO,CAAC,KAAK,OAAO,CAAC;AAAA,EAC/B;AAEA,QAAM,gBAAgB,QAAQ,CAAC;AAG/B,QAAM,SAAS,gBAAiB,sBAAsB,OAAO,QAAQ;AACrE,SAAO;AACT;;;AClEO,SAAS,wBAAwB,mBAA2B;AACjE,QAAM,UAAU,gBAAgB,iBAAiB;AACjD,QAAM,mBAA6B,CAAC;AACpC,QAAM,qBAA+B,CAAC;AACtC,aAAW,SAAS,SAAS;AAC3B,QAAI,QAAQ,KAAK,EAAG,kBAAiB,KAAK,QAAQ,CAAC;AAAA,QAC9C,oBAAmB,MAAM,QAAQ,KAAK,CAAC;AAAA,EAC9C;AACA,SAAO,EAAE,kBAAkB,mBAAmB;AAChD;;;ACcO,SAAS,2BAA2B,MAAoC;AAC7E,QAAM,MAAM,QAAQ,MAAM,IAAI,GAAG;AACjC,QAAM,uBAAuB,QAAQ,MAAM,KAAK,GAAG;AACnD,QAAM,mBAAmB,QAAQ,MAAM,KAAK,GAAG;AAC/C,QAAM,WAAW,QAAQ,MAAM,KAAK,GAAG;AACvC,QAAM,SAAS,QAAQ,MAAM,KAAK,GAAG;AACrC,QAAM,SAAS,QAAQ,MAAM,KAAK,GAAG;AACrC,QAAM,mBAAmB,QAAQ,MAAM,KAAK,GAAG;AAE/C,QAAM,SAAS,QAAQ,MAAM,KAAK,GAAG;AACrC,QAAM,uBAAuB,QAAQ,MAAM,KAAK,GAAG;AACnD,QAAM,yBAAyB,QAAQ,MAAM,KAAK,GAAG;AACrD,QAAM,sBAAsB,QAAQ,MAAM,KAAK,GAAG;AAClD,QAAM,gBAAgB,QAAQ,MAAM,KAAK,GAAG;AAC5C,QAAM,YAAY,QAAQ,MAAM,KAAK,IAAI;AACzC,QAAM,YAAY,QAAQ,MAAM,MAAM,IAAI;AAC1C,QAAM,yBAAyB,QAAQ,MAAM,MAAM,IAAI;AAEvD,QAAM,kBAAkB,QAAQ,MAAM,MAAM,IAAI;AAChD,QAAM,cAAc,QAAQ,MAAM,MAAM,IAAI;AAC5C,QAAM,2BAA2B,QAAQ,MAAM,MAAM,IAAI;AAEzD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,CAAC,CAAC;AAAA,IACV,QAAQ,CAAC,CAAC;AAAA,IACV,kBAAkB,CAAC,CAAC;AAAA;AAAA,IAEpB,QAAQ,CAAC,CAAC;AAAA,IACV,sBAAsB,CAAC,CAAC;AAAA,IACxB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,IACA,wBAAwB,CAAC,CAAC;AAAA,IAC1B,qBAAqB,CAAC,CAAC;AAAA,IACvB,0BAA0B,CAAC,CAAC;AAAA,EAC9B;AACF;AAEO,SAAS,6BAA6B,MAAc;AACzD,QAAM,MAAM,QAAQ,MAAM,IAAI,GAAG;AACjC,QAAM,uBAAuB,QAAQ,MAAM,KAAK,GAAG;AACnD,QAAM,mBAAmB,QAAQ,MAAM,KAAK,GAAG;AAC/C,QAAM,WAAW,QAAQ,MAAM,KAAK,GAAG;AACvC,QAAM,SAAS,OAAO,QAAQ,MAAM,KAAK,GAAG,CAAC;AAC7C,QAAM,SAAS,OAAO,QAAQ,MAAM,KAAK,GAAG,CAAC;AAC7C,QAAM,mBAAmB,OAAO,QAAQ,MAAM,KAAK,GAAG,CAAC;AACvD,QAAM,yBAAyB,OAAO,QAAQ,MAAM,KAAK,GAAG,CAAC;AAC7D,QAAM,gBAAgB,QAAQ,MAAM,KAAK,GAAG;AAC5C,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,CAAC,CAAC;AAAA,IACV,QAAQ,CAAC,CAAC;AAAA,IACV,kBAAkB,CAAC,CAAC;AAAA,IACpB,wBAAwB,CAAC,CAAC;AAAA,IAC1B;AAAA,EACF;AACF;;;ACnGO,IAAM,mBAAmB;AACzB,IAAM,gBAAgB;;;ACAtB,IAAM,MAAM,OAAO;AACnB,IAAM,WAAW,MAAM;AAEvB,IAAM,MAAM,OAAO;AACnB,IAAM,WAAW,MAAM;AAEvB,IAAM,gBAAgB,OAAO;AAE7B,SAAS,OAAO,GAAW,GAAmB;AACnD,UAAQ,IAAI,IAAI,YAAY;AAC9B;AAEO,SAAS,OAAO,GAAW,GAAmB;AACnD,QAAM,QAAQ,IAAI;AAElB,UAAQ,QAAQ,IAAI,OAAO;AAC7B;AAEO,SAAS,SAAS,GAAmB;AAC1C,QAAM,YAAY,gBAAgB;AAElC,UAAQ,YAAY,KAAK;AAC3B;AAEO,SAAS,SAAS,GAAmB;AAC1C,SAAO,IAAI;AACb;AAEO,SAAS,OAAO,GAAW,GAAmB;AACnD,QAAM,QAAQ,IAAI;AAElB,UAAQ,QAAQ,IAAI,OAAO;AAC7B;;;ACxBO,SAAS,4BAA4B;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AACF,GAA+C;AAC7C,QAAM,MAAM,OAAO,mBAAmB,mBAAmB;AAEzD,MAAI,OAAO,IAAI;AACb,WAAe;AAAA,EACjB;AAEA,QAAM,cAAc,MAAM;AAC1B,QAAM,cAAc,MAAM,IAAI,MAAM,KAAK;AACzC,QAAM,eACI,OAAO,MAAM,IAAI,KAAK,mBAAmB;AACnD,QAAM,iBAAyB,OAAO,cAAc,IAAI,IAAI;AAE5D,QAAM,aAAc,MAAM,cAAc,eAAgB;AACxD,QAAM,YAAa,MAAM,cAAc,cAAc,iBAAkB;AACvE,SAAe,MAAO,OAAO,MAAO,mBAAmB,aAAa;AACtE;AAQO,SAAS,wBAAwB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AACF,GAAkC;AAChC,SACG,OAAO,OAAO,mBAAmB,mBAAmB,IAAK,mBAClD;AAEZ;AAQO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAoC;AAClC,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,QAAM,oBAAoB,wBAAwB;AAAA,IAChD;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAe,OAAO,OAAO,iBAAiB;AAChD;AAEO,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAoC;AAClC,MAAI,qBAAqB,uBAAuB,SAAS,IAAI;AAC3D,WAAO;AAAA,EACT;AACA,SAAe;AAAA,IACb;AAAA,IACA,4BAA4B;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACF;AASO,SAAS,2BAA2B;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA0B;AACxB,MAAI,CAAC,eAAe;AAClB,WAAO;AAAA,EACT;AAEA,SAAe;AAAA,IACL;AAAA,MACE,SAAS,aAAa;AAAA,MAC9B,oBAAoB;AAAA,QAClB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEO,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAkC;AAChC,MAAI,CAAC,eAAe;AAClB,WAAO;AAAA,EACT;AAEA,SAAe;AAAA,IACb;AAAA,IACA,kBAAkB;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACF;AASO,SAAS,kCAAkC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AACF,GAA2C;AACzC,MAAI,CAAC,sCAAsC;AACzC,WAAO,CAAC;AAAA,EACV;AAEA,SAAe;AAAA,IACZ,2CAA2C,8BAC1C,OAAO;AAAA,IACT;AAAA,EACF;AACF;AAQO,SAAS,iDAAiD;AAAA,EAC/D;AAAA,EACA;AAAA,EACA;AACF,GAA2D;AACzD,MAAI,CAAC,YAAY;AACf,WAAO;AAAA,EACT;AAEA,QAAM,0CACH,2CAA2C,aAC1C,OAAO,gBACT;AACF,SAAO,0CAA0C,IAC7C,0CACA;AACN;AAiBO,SAAS,wCAAwC;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAsF;AACpF,QAAM,iCACH,UAAU,iCAAkC,OAAO,MAAM,QAAQ;AACpE,QAAM,aACH,iCAAiC,sCAClC,OAAO,MAAM,+BAA+B;AAC9C,SAAO,EAAE,gCAAgC,WAAW;AACtD;;;AC3NO,IAAM,8BAA8B;EACzC;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;YACd,YAAY;cACV;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;YACF;UACF;QACF;MACF;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;YACd,YAAY;cACV;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;YACF;UACF;QACF;MACF;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;AACF;;;ACtfO,IAAM,sBAAsB;EACjC;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;MACA;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;YACd,YAAY;cACV;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;YACF;UACF;QACF;MACF;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cA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AAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,IAAI;AAAA,IACF,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,IAAI;AAAA,IACF,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,E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","names":["import_viem","PayloadState","import_viem","import_actions","ProposalState","import_viem","body","import_standalone","solidityPlugin"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/math/binary.ts","../src/aave/user.ts","../src/aave/reserve.ts","../src/aave/constants.ts","../src/aave/ray-math.ts","../src/aave/pool-math.ts","../../../node_modules/.pnpm/@bgd-labs+aave-address-book@4.15.0/node_modules/@bgd-labs/aave-address-book/src/ts/abis/IPayloadsControllerCore.ts","../../../node_modules/.pnpm/@bgd-labs+aave-address-book@4.15.0/node_modules/@bgd-labs/aave-address-book/src/ts/abis/IGovernanceCore.ts","../src/aave/governance/payloadsController.ts","../src/math/slot.ts","../src/aave/governance/governance.ts","../src/ecosystem/generated/etherscanExplorers.ts","../src/ecosystem/generated/routescanExplorers.ts","../src/ecosystem/explorers.ts","../src/ecosystem/tenderly.ts","../src/ecosystem/foundry.ts","../src/ecosystem/event-db.ts","../src/ecosystem/constants.ts","../src/operations/diffCode.ts","../src/seatbelt/logs.ts","../src/seatbelt/selfdestruct.ts","../src/seatbelt/verified.ts","../src/seatbelt/tenderly-report.ts"],"sourcesContent":["export * from \"./math/binary\";\nexport * from \"./aave/user\";\nexport * from \"./aave/reserve\";\nexport * from \"./aave/constants\";\nexport * from \"./aave/pool-math\";\nexport * from \"./aave/ray-math\";\nexport * from \"./aave/governance/payloadsController\";\nexport * from \"./aave/governance/governance\";\nexport * from \"./ecosystem/explorers\";\nexport * from \"./ecosystem/tenderly\";\nexport * from \"./ecosystem/foundry\";\nexport * from \"./ecosystem/event-db\";\n// some commonjs issue idk\n// export * from \"./ecosystem/ipfs\";\nexport * from \"./ecosystem/constants\";\nexport * from \"./operations/diffCode\";\nexport * from \"./seatbelt/logs\";\nexport * from \"./seatbelt/selfdestruct\";\nexport * from \"./seatbelt/tenderly-report\";\n","/**\n * In solidity it is a quite common practice to encode bit variables in bitmaps opposed to bool structs.\n * The reason for this is that solidity will pack one boolean per byte, while with a bitmap, one can pack one bit.. per bit.\n * These utilities help with extracting the indexes of a given bitmap.\n */\n\n/**\n * Decodes a bitmap as an array of indexes.\n * @param bitmap The bitmap\n * @returns an array of indexes\n */\nexport function bitmapToIndexes(bitmap: bigint): number[] {\n const indexes: number[] = [];\n for (let i = 0; bitmap != 0n; i++) {\n if (bitmap & 0x1n) indexes.push(i);\n bitmap = bitmap >> 1n;\n }\n return indexes;\n}\n\n/**\n * Returns the selected bits of a uint256 as bigint\n * @param uint256\n * @param startBit\n * @param endBit\n * @returns\n */\nexport function getBits(\n uint256: bigint,\n startBit: bigint,\n _endBit: bigint,\n): bigint {\n let endBit = _endBit;\n if (startBit > endBit) {\n throw new Error(\n \"Invalid bit range: startBit must be less than or equal to endBit\",\n );\n }\n\n const bitLength = BigInt(uint256.toString(2)).toString().length;\n if (endBit >= bitLength) {\n endBit = BigInt(bitLength - 1);\n }\n\n const mask = (1n << (endBit - startBit + 1n)) - 1n;\n return (uint256 >> startBit) & mask;\n}\n\n/**\n * Sets the bits in a bigint\n * @param input\n * @param startBit inclusive\n * @param endBit inclusive\n * @param value the value to replace\n * @returns\n */\nexport function setBits(\n input: bigint,\n startBit: bigint,\n endBit: bigint,\n replaceValue: bigint | number,\n) {\n const bigIntReplaceValue = BigInt(replaceValue);\n\n // Calculate the mask for the specified range\n let mask = BigInt(0);\n for (let i = startBit; i < endBit + 1n; i++) {\n mask |= BigInt(1) << BigInt(i);\n }\n // Clear the bits in the original number within the specified range\n const clearedNumber = input & ~mask;\n\n // Set the new bits in the specified range\n const result = clearedNumber | (bigIntReplaceValue << BigInt(startBit));\n return result;\n}\n","import { bitmapToIndexes } from \"../math/binary\";\n\n/**\n * The userConfiguration on aave is stored as an alteranting bitmap.\n * The least significant bit starts with borrowing on reserve 0\n * In practice this means that the following bitmap b'1011 would mean a user\n * is borrowing(bit 0) reserve 0, and supplies(bit 1,3) collateral on reserve 0 and 1\n * @param userConfiguration bitmap\n */\nexport function decodeUserConfiguration(userConfiguration: bigint) {\n const indexes = bitmapToIndexes(userConfiguration);\n const borrowedAssetIds: number[] = [];\n const collateralAssetIds: number[] = [];\n for (const index of indexes) {\n if (index % 2 == 0) borrowedAssetIds.push(index / 2);\n else collateralAssetIds.push((index - 1) / 2);\n }\n return { borrowedAssetIds, collateralAssetIds };\n}\n","import { getBits } from \"../math/binary\";\n\nexport type ReserveConfiguration = {\n ltv: bigint;\n liquidationThreshold: bigint;\n liquidationBonus: bigint;\n decimals: bigint;\n active: boolean;\n frozen: boolean;\n borrowingEnabled: boolean;\n // deprecated in 3.1\n // stableRateBorrowingEnabled: boolean;\n paused: boolean;\n borrowingInIsolation: boolean;\n siloedBorrowingEnabled: boolean;\n flashloaningEnabled: boolean;\n reserveFactor: bigint;\n borrowCap: bigint;\n supplyCap: bigint;\n liquidationProtocolFee: bigint;\n // deprecated in 3.2\n // eModeCategory: bigint;\n unbackedMintCap: bigint;\n debtCeiling: bigint;\n virtualAccountingEnabled: boolean;\n};\n\n/**\n * ReserveConfiguration is a tightly packed struct that contains the configuration of a reserve\n * @param data\n * @returns the decoded ReserveConfiguration\n */\nexport function decodeReserveConfiguration(data: bigint): ReserveConfiguration {\n const ltv = getBits(data, 0n, 15n);\n const liquidationThreshold = getBits(data, 16n, 31n);\n const liquidationBonus = getBits(data, 32n, 47n);\n const decimals = getBits(data, 48n, 55n);\n const active = getBits(data, 56n, 56n);\n const frozen = getBits(data, 57n, 57n);\n const borrowingEnabled = getBits(data, 58n, 58n);\n // const stableRateBorrowingEnabled = getBits(data, 59n, 59n);\n const paused = getBits(data, 60n, 60n);\n const borrowingInIsolation = getBits(data, 61n, 61n);\n const siloedBorrowingEnabled = getBits(data, 62n, 62n);\n const flashloaningEnabled = getBits(data, 63n, 63n);\n const reserveFactor = getBits(data, 64n, 79n);\n const borrowCap = getBits(data, 80n, 115n);\n const supplyCap = getBits(data, 116n, 151n);\n const liquidationProtocolFee = getBits(data, 152n, 167n);\n // const eModeCategory = getBits(data, 168n, 175n);\n const unbackedMintCap = getBits(data, 176n, 211n);\n const debtCeiling = getBits(data, 212n, 251n);\n const virtualAccountingEnabled = getBits(data, 252n, 252n);\n\n return {\n ltv,\n liquidationThreshold,\n liquidationBonus,\n decimals,\n active: !!active,\n frozen: !!frozen,\n borrowingEnabled: !!borrowingEnabled,\n // stableRateBorrowingEnabled: !!stableRateBorrowingEnabled,\n paused: !!paused,\n borrowingInIsolation: !!borrowingInIsolation,\n reserveFactor,\n borrowCap,\n supplyCap,\n liquidationProtocolFee,\n // eModeCategory,\n unbackedMintCap,\n debtCeiling,\n siloedBorrowingEnabled: !!siloedBorrowingEnabled,\n flashloaningEnabled: !!flashloaningEnabled,\n virtualAccountingEnabled: !!virtualAccountingEnabled,\n };\n}\n\nexport function decodeReserveConfigurationV2(data: bigint) {\n const ltv = getBits(data, 0n, 15n);\n const liquidationThreshold = getBits(data, 16n, 31n);\n const liquidationBonus = getBits(data, 32n, 47n);\n const decimals = getBits(data, 48n, 55n);\n const active = Number(getBits(data, 56n, 56n));\n const frozen = Number(getBits(data, 57n, 57n));\n const borrowingEnabled = Number(getBits(data, 58n, 58n));\n const stableBorrowingEnabled = Number(getBits(data, 59n, 59n));\n const reserveFactor = getBits(data, 64n, 79n);\n return {\n ltv,\n liquidationThreshold,\n liquidationBonus,\n decimals,\n active: !!active,\n frozen: !!frozen,\n borrowingEnabled: !!borrowingEnabled,\n stableBorrowingEnabled: !!stableBorrowingEnabled,\n reserveFactor,\n };\n}\n","export const SECONDS_PER_YEAR = 31536000n;\nexport const LTV_PRECISION = 4n;\n","// JS implementation of https://github.com/bgd-labs/aave-v3-origin/blob/main/src/contracts/protocol/libraries/math/WadRayMath.sol\nexport const WAD = 10n ** 18n;\nexport const HALF_WAD = WAD / 2n;\n\nexport const RAY = 10n ** 27n;\nexport const HALF_RAY = RAY / 2n;\n\nexport const WAD_RAY_RATIO = 10n ** 9n;\n\nexport function rayMul(a: bigint, b: bigint): bigint {\n return (a * b + HALF_RAY) / RAY;\n}\n\nexport function rayDiv(a: bigint, b: bigint): bigint {\n const halfB = b / 2n;\n\n return (halfB + a * RAY) / b;\n}\n\nexport function rayToWad(a: bigint): bigint {\n const halfRatio = WAD_RAY_RATIO / 2n;\n\n return (halfRatio + a) / WAD_RAY_RATIO;\n}\n\nexport function wadToRay(a: bigint): bigint {\n return a * WAD_RAY_RATIO;\n}\n\nexport function wadDiv(a: bigint, b: bigint): bigint {\n const halfB = b / 2n;\n\n return (halfB + a * WAD) / b;\n}\n","import { LTV_PRECISION, SECONDS_PER_YEAR } from \"./constants\";\nimport * as RayMath from \"./ray-math\";\n\ninterface CalculateCompoundedInterestRequest {\n rate: bigint;\n currentTimestamp: number;\n lastUpdateTimestamp: number;\n}\n\nexport function calculateCompoundedInterest({\n rate,\n currentTimestamp,\n lastUpdateTimestamp,\n}: CalculateCompoundedInterestRequest): bigint {\n const exp = BigInt(currentTimestamp - lastUpdateTimestamp);\n\n if (exp == 0n) {\n return RayMath.RAY;\n }\n\n const expMinusOne = exp - 1n;\n const expMinusTwo = exp > 2 ? exp - 2n : 0n;\n const basePowerTwo =\n RayMath.rayMul(rate, rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\n const basePowerThree = RayMath.rayMul(basePowerTwo, rate) / SECONDS_PER_YEAR;\n\n const secondTerm = (exp * expMinusOne * basePowerTwo) / 2n;\n const thirdTerm = (exp * expMinusOne * expMinusTwo * basePowerThree) / 6n;\n return RayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\n}\n\ninterface LinearInterestRequest {\n rate: bigint;\n currentTimestamp: number;\n lastUpdateTimestamp: number;\n}\n\nexport function calculateLinearInterest({\n rate,\n currentTimestamp,\n lastUpdateTimestamp,\n}: LinearInterestRequest): bigint {\n return (\n (rate * BigInt(currentTimestamp - lastUpdateTimestamp)) / SECONDS_PER_YEAR +\n RayMath.RAY\n );\n}\n\ninterface NormalizedIncomeRequest {\n rate: bigint;\n index: bigint;\n lastUpdateTimestamp: number;\n currentTimestamp: number;\n}\nexport function getNormalizedIncome({\n rate,\n index,\n lastUpdateTimestamp,\n currentTimestamp,\n}: NormalizedIncomeRequest): bigint {\n if (!rate) {\n return index;\n }\n\n const cumulatedInterest = calculateLinearInterest({\n rate,\n currentTimestamp,\n lastUpdateTimestamp,\n });\n\n return RayMath.rayMul(index, cumulatedInterest);\n}\n\nexport function getNormalizedDebt({\n rate,\n index,\n currentTimestamp,\n lastUpdateTimestamp,\n}: NormalizedIncomeRequest): bigint {\n if (currentTimestamp === lastUpdateTimestamp || rate === 0n) {\n return index;\n }\n return RayMath.rayMul(\n index,\n calculateCompoundedInterest({\n rate,\n currentTimestamp,\n lastUpdateTimestamp,\n }),\n );\n}\n\ninterface CurrentBalanceRequest {\n scaledBalance: bigint;\n index: bigint;\n rate: bigint;\n lastUpdateTimestamp: number;\n currentTimestamp: number;\n}\nexport function getCurrentLiquidityBalance({\n scaledBalance,\n index,\n rate,\n lastUpdateTimestamp,\n currentTimestamp,\n}: CurrentBalanceRequest) {\n if (!scaledBalance) {\n return 0n;\n }\n\n return RayMath.rayToWad(\n RayMath.rayMul(\n RayMath.wadToRay(scaledBalance),\n getNormalizedIncome({\n rate,\n index,\n lastUpdateTimestamp,\n currentTimestamp,\n }),\n ),\n );\n}\n\nexport function getCurrentDebtBalance({\n index,\n scaledBalance,\n rate,\n lastUpdateTimestamp,\n currentTimestamp,\n}: CurrentBalanceRequest): bigint {\n if (!scaledBalance) {\n return 0n;\n }\n\n return RayMath.rayMul(\n scaledBalance,\n getNormalizedDebt({\n index,\n rate,\n currentTimestamp,\n lastUpdateTimestamp,\n }),\n );\n}\n\ninterface HealthFactorFromBalanceRequest {\n collateralBalanceMarketReferenceCurrency: bigint;\n borrowBalanceMarketReferenceCurrency: bigint;\n averageLiquidationThreshold: bigint;\n}\n\n// 1e18 returned means 1HF\nexport function calculateHealthFactorFromBalances({\n borrowBalanceMarketReferenceCurrency,\n collateralBalanceMarketReferenceCurrency,\n averageLiquidationThreshold,\n}: HealthFactorFromBalanceRequest): bigint {\n if (!borrowBalanceMarketReferenceCurrency) {\n return -1n; // Invalid number\n }\n\n return RayMath.wadDiv(\n (collateralBalanceMarketReferenceCurrency * averageLiquidationThreshold) /\n 10n ** LTV_PRECISION,\n borrowBalanceMarketReferenceCurrency,\n );\n}\n\ninterface AvailableBorrowsMarketReferenceCurrencyRequest {\n collateralBalanceMarketReferenceCurrency: bigint;\n borrowBalanceMarketReferenceCurrency: bigint;\n currentLtv: bigint;\n}\n\nexport function calculateAvailableBorrowsMarketReferenceCurrency({\n collateralBalanceMarketReferenceCurrency,\n borrowBalanceMarketReferenceCurrency,\n currentLtv,\n}: AvailableBorrowsMarketReferenceCurrencyRequest): bigint {\n if (!currentLtv) {\n return 0n;\n }\n\n const availableBorrowsMarketReferenceCurrency =\n (collateralBalanceMarketReferenceCurrency * currentLtv) /\n 10n ** LTV_PRECISION -\n borrowBalanceMarketReferenceCurrency;\n return availableBorrowsMarketReferenceCurrency > 0\n ? availableBorrowsMarketReferenceCurrency\n : 0n;\n}\n\ninterface MarketReferenceCurrencyAndUsdBalanceRequest {\n balance: bigint;\n priceInMarketReferenceCurrency: bigint;\n marketReferenceCurrencyDecimals: number;\n decimals: number;\n marketReferencePriceInUsdNormalized: bigint;\n}\n\ninterface MarketReferenceAndUsdBalanceResponse {\n marketReferenceCurrencyBalance: bigint;\n usdBalance: bigint;\n}\n/**\n * @returns non humanized/normalized values for usd/marketReference\n */\nexport function getMarketReferenceCurrencyAndUsdBalance({\n balance,\n priceInMarketReferenceCurrency,\n marketReferenceCurrencyDecimals,\n decimals,\n marketReferencePriceInUsdNormalized,\n}: MarketReferenceCurrencyAndUsdBalanceRequest): MarketReferenceAndUsdBalanceResponse {\n const marketReferenceCurrencyBalance =\n (balance * priceInMarketReferenceCurrency) / BigInt(10 ** decimals);\n const usdBalance =\n (marketReferenceCurrencyBalance * marketReferencePriceInUsdNormalized) /\n BigInt(10 ** marketReferenceCurrencyDecimals);\n return { marketReferenceCurrencyBalance, usdBalance };\n}\n","// AUTOGENERATED - MANUALLY CHANGES WILL BE REVERTED BY THE GENERATOR\nexport const IPayloadsControllerCore_ABI = [\n {\n type: 'function',\n name: 'EXPIRATION_DELAY',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'GRACE_PERIOD',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'MAX_EXECUTION_DELAY',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'MIN_EXECUTION_DELAY',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'cancelPayload',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'createPayload',\n inputs: [\n {\n name: 'actions',\n type: 'tuple[]',\n internalType: 'struct IPayloadsControllerCore.ExecutionAction[]',\n components: [\n {\n name: 'target',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'withDelegateCall',\n type: 'bool',\n internalType: 'bool',\n },\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'value',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'signature',\n type: 'string',\n internalType: 'string',\n },\n {\n name: 'callData',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n },\n ],\n outputs: [\n {\n name: '',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'executePayload',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n outputs: [],\n stateMutability: 'payable',\n },\n {\n type: 'function',\n name: 'getExecutorSettingsByAccessControl',\n inputs: [\n {\n name: 'accessControl',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple',\n internalType: 'struct IPayloadsControllerCore.ExecutorConfig',\n components: [\n {\n name: 'executor',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'delay',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getPayloadById',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple',\n internalType: 'struct IPayloadsControllerCore.Payload',\n components: [\n {\n name: 'creator',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'maximumAccessLevelRequired',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'state',\n type: 'uint8',\n internalType: 'enum IPayloadsControllerCore.PayloadState',\n },\n {\n name: 'createdAt',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'queuedAt',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'executedAt',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'cancelledAt',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'expirationTime',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'delay',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'gracePeriod',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'actions',\n type: 'tuple[]',\n internalType: 'struct IPayloadsControllerCore.ExecutionAction[]',\n components: [\n {\n name: 'target',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'withDelegateCall',\n type: 'bool',\n internalType: 'bool',\n },\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'value',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'signature',\n type: 'string',\n internalType: 'string',\n },\n {\n name: 'callData',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n },\n ],\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getPayloadState',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'uint8',\n internalType: 'enum IPayloadsControllerCore.PayloadState',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getPayloadsCount',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'updateExecutors',\n inputs: [\n {\n name: 'executors',\n type: 'tuple[]',\n internalType: 'struct IPayloadsControllerCore.UpdateExecutorInput[]',\n components: [\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'executorConfig',\n type: 'tuple',\n internalType: 'struct IPayloadsControllerCore.ExecutorConfig',\n components: [\n {\n name: 'executor',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'delay',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n },\n ],\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'event',\n name: 'ExecutorSet',\n inputs: [\n {\n name: 'accessLevel',\n type: 'uint8',\n indexed: true,\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'executor',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'delay',\n type: 'uint40',\n indexed: false,\n internalType: 'uint40',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PayloadCancelled',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n indexed: false,\n internalType: 'uint40',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PayloadCreated',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n indexed: true,\n internalType: 'uint40',\n },\n {\n name: 'creator',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'actions',\n type: 'tuple[]',\n indexed: false,\n internalType: 'struct IPayloadsControllerCore.ExecutionAction[]',\n components: [\n {\n name: 'target',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'withDelegateCall',\n type: 'bool',\n internalType: 'bool',\n },\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'value',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'signature',\n type: 'string',\n internalType: 'string',\n },\n {\n name: 'callData',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n },\n {\n name: 'maximumAccessLevelRequired',\n type: 'uint8',\n indexed: true,\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PayloadExecuted',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n indexed: false,\n internalType: 'uint40',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PayloadExecutionMessageReceived',\n inputs: [\n {\n name: 'originSender',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'originChainId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'delivered',\n type: 'bool',\n indexed: true,\n internalType: 'bool',\n },\n {\n name: 'message',\n type: 'bytes',\n indexed: false,\n internalType: 'bytes',\n },\n {\n name: 'reason',\n type: 'bytes',\n indexed: false,\n internalType: 'bytes',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PayloadQueued',\n inputs: [\n {\n name: 'payloadId',\n type: 'uint40',\n indexed: false,\n internalType: 'uint40',\n },\n ],\n anonymous: false,\n },\n] as const;\n","// AUTOGENERATED - MANUALLY CHANGES WILL BE REVERTED BY THE GENERATOR\nexport const IGovernanceCore_ABI = [\n {\n type: 'function',\n name: 'ACHIEVABLE_VOTING_PARTICIPATION',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'CANCELLATION_FEE_COLLECTOR',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'address',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'COOLDOWN_PERIOD',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'MIN_VOTING_DURATION',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'NAME',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'string',\n internalType: 'string',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'PRECISION_DIVIDER',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'PROPOSAL_EXPIRATION_TIME',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'VOTING_TOKENS_CAP',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'activateVoting',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'addVotingPortals',\n inputs: [\n {\n name: 'votingPortals',\n type: 'address[]',\n internalType: 'address[]',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'cancelProposal',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'createProposal',\n inputs: [\n {\n name: 'payloads',\n type: 'tuple[]',\n internalType: 'struct PayloadsControllerUtils.Payload[]',\n components: [\n {\n name: 'chain',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'payloadsController',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'payloadId',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n },\n {\n name: 'votingPortal',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'ipfsHash',\n type: 'bytes32',\n internalType: 'bytes32',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'payable',\n },\n {\n type: 'function',\n name: 'executeProposal',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'getCancellationFee',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getPowerStrategy',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'contract IGovernancePowerStrategy',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getProposal',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple',\n internalType: 'struct IGovernanceCore.Proposal',\n components: [\n {\n name: 'state',\n type: 'uint8',\n internalType: 'enum IGovernanceCore.State',\n },\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'creationTime',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'votingDuration',\n type: 'uint24',\n internalType: 'uint24',\n },\n {\n name: 'votingActivationTime',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'queuingTime',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'cancelTimestamp',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'creator',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'votingPortal',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'snapshotBlockHash',\n type: 'bytes32',\n internalType: 'bytes32',\n },\n {\n name: 'ipfsHash',\n type: 'bytes32',\n internalType: 'bytes32',\n },\n {\n name: 'forVotes',\n type: 'uint128',\n internalType: 'uint128',\n },\n {\n name: 'againstVotes',\n type: 'uint128',\n internalType: 'uint128',\n },\n {\n name: 'cancellationFee',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'payloads',\n type: 'tuple[]',\n internalType: 'struct PayloadsControllerUtils.Payload[]',\n components: [\n {\n name: 'chain',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'payloadsController',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'payloadId',\n type: 'uint40',\n internalType: 'uint40',\n },\n ],\n },\n ],\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getProposalState',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'uint8',\n internalType: 'enum IGovernanceCore.State',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getProposalsCount',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getRepresentativeByChain',\n inputs: [\n {\n name: 'voter',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'chainId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'address',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getRepresentedVotersByChain',\n inputs: [\n {\n name: 'representative',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'chainId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'address[]',\n internalType: 'address[]',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getVotingConfig',\n inputs: [\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple',\n internalType: 'struct IGovernanceCore.VotingConfig',\n components: [\n {\n name: 'coolDownBeforeVotingStart',\n type: 'uint24',\n internalType: 'uint24',\n },\n {\n name: 'votingDuration',\n type: 'uint24',\n internalType: 'uint24',\n },\n {\n name: 'yesThreshold',\n type: 'uint56',\n internalType: 'uint56',\n },\n {\n name: 'yesNoDifferential',\n type: 'uint56',\n internalType: 'uint56',\n },\n {\n name: 'minPropositionPower',\n type: 'uint56',\n internalType: 'uint56',\n },\n ],\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getVotingPortalsCount',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'isVotingPortalApproved',\n inputs: [\n {\n name: 'votingPortal',\n type: 'address',\n internalType: 'address',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'bool',\n internalType: 'bool',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'queueProposal',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'forVotes',\n type: 'uint128',\n internalType: 'uint128',\n },\n {\n name: 'againstVotes',\n type: 'uint128',\n internalType: 'uint128',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'redeemCancellationFee',\n inputs: [\n {\n name: 'proposalIds',\n type: 'uint256[]',\n internalType: 'uint256[]',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'removeVotingPortals',\n inputs: [\n {\n name: 'votingPortals',\n type: 'address[]',\n internalType: 'address[]',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'rescueVotingPortal',\n inputs: [\n {\n name: 'votingPortal',\n type: 'address',\n internalType: 'address',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'setPowerStrategy',\n inputs: [\n {\n name: 'newPowerStrategy',\n type: 'address',\n internalType: 'contract IGovernancePowerStrategy',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'setVotingConfigs',\n inputs: [\n {\n name: 'votingConfigs',\n type: 'tuple[]',\n internalType: 'struct IGovernanceCore.SetVotingConfigInput[]',\n components: [\n {\n name: 'accessLevel',\n type: 'uint8',\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'coolDownBeforeVotingStart',\n type: 'uint24',\n internalType: 'uint24',\n },\n {\n name: 'votingDuration',\n type: 'uint24',\n internalType: 'uint24',\n },\n {\n name: 'yesThreshold',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'yesNoDifferential',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'minPropositionPower',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'updateCancellationFee',\n inputs: [\n {\n name: 'cancellationFee',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'updateRepresentativesForChain',\n inputs: [\n {\n name: 'representatives',\n type: 'tuple[]',\n internalType: 'struct IGovernanceCore.RepresentativeInput[]',\n components: [\n {\n name: 'representative',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'chainId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'event',\n name: 'CancellationFeeRedeemed',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'to',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'cancellationFee',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n {\n name: 'success',\n type: 'bool',\n indexed: true,\n internalType: 'bool',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'CancellationFeeUpdated',\n inputs: [\n {\n name: 'cancellationFee',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PayloadSent',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'payloadId',\n type: 'uint40',\n indexed: false,\n internalType: 'uint40',\n },\n {\n name: 'payloadsController',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'chainId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'payloadNumberOnProposal',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n {\n name: 'numberOfPayloadsOnProposal',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'PowerStrategyUpdated',\n inputs: [\n {\n name: 'newPowerStrategy',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'ProposalCanceled',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'ProposalCreated',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'creator',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'accessLevel',\n type: 'uint8',\n indexed: true,\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'ipfsHash',\n type: 'bytes32',\n indexed: false,\n internalType: 'bytes32',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'ProposalExecuted',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'ProposalFailed',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'votesFor',\n type: 'uint128',\n indexed: false,\n internalType: 'uint128',\n },\n {\n name: 'votesAgainst',\n type: 'uint128',\n indexed: false,\n internalType: 'uint128',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'ProposalQueued',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'votesFor',\n type: 'uint128',\n indexed: false,\n internalType: 'uint128',\n },\n {\n name: 'votesAgainst',\n type: 'uint128',\n indexed: false,\n internalType: 'uint128',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'RepresentativeUpdated',\n inputs: [\n {\n name: 'voter',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'representative',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'chainId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'VoteForwarded',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'voter',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'support',\n type: 'bool',\n indexed: true,\n internalType: 'bool',\n },\n {\n name: 'votingAssetsWithSlot',\n type: 'tuple[]',\n indexed: false,\n internalType: 'struct IVotingMachineWithProofs.VotingAssetWithSlot[]',\n components: [\n {\n name: 'underlyingAsset',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'slot',\n type: 'uint128',\n internalType: 'uint128',\n },\n ],\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'VotingActivated',\n inputs: [\n {\n name: 'proposalId',\n type: 'uint256',\n indexed: true,\n internalType: 'uint256',\n },\n {\n name: 'snapshotBlockHash',\n type: 'bytes32',\n indexed: true,\n internalType: 'bytes32',\n },\n {\n name: 'votingDuration',\n type: 'uint24',\n indexed: false,\n internalType: 'uint24',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'VotingConfigUpdated',\n inputs: [\n {\n name: 'accessLevel',\n type: 'uint8',\n indexed: true,\n internalType: 'enum PayloadsControllerUtils.AccessControl',\n },\n {\n name: 'votingDuration',\n type: 'uint24',\n indexed: false,\n internalType: 'uint24',\n },\n {\n name: 'coolDownBeforeVotingStart',\n type: 'uint24',\n indexed: false,\n internalType: 'uint24',\n },\n {\n name: 'yesThreshold',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n {\n name: 'yesNoDifferential',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n {\n name: 'minPropositionPower',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'VotingPortalUpdated',\n inputs: [\n {\n name: 'votingPortal',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'approved',\n type: 'bool',\n indexed: true,\n internalType: 'bool',\n },\n ],\n anonymous: false,\n },\n] as const;\n","import { IPayloadsControllerCore_ABI } from \"@bgd-labs/aave-address-book/abis\";\nimport {\n Address,\n Client,\n GetContractReturnType,\n Hex,\n TestClient,\n encodePacked,\n getContract,\n} from \"viem\";\nimport { getSolidityStorageSlotUint } from \"../../math/slot\";\nimport { getBlock } from \"viem/actions\";\n\nexport enum PayloadState {\n None = 0,\n Created = 1,\n Queued = 2,\n Executed = 3,\n Cancelled = 4,\n Expired = 5,\n}\n\nexport const HUMAN_READABLE_PAYLOAD_STATE = {\n [PayloadState.None]: \"None\",\n [PayloadState.Created]: \"Created\",\n [PayloadState.Queued]: \"Queued\",\n [PayloadState.Executed]: \"Executed\",\n [PayloadState.Cancelled]: \"Cancelled\",\n [PayloadState.Expired]: \"Expired\",\n};\n\nexport type PayloadsControllerContract = GetContractReturnType<\n typeof IPayloadsControllerCore_ABI,\n Client\n>;\n\nexport function getPayloadsController<T extends Client>(\n client: T,\n address: Hex,\n): PayloadsControllerContract {\n return getContract({\n abi: IPayloadsControllerCore_ABI,\n client,\n address,\n });\n}\n\nexport async function makePayloadExecutableOnTestClient(\n client: TestClient,\n payloadsController: Address,\n payloadId: number,\n) {\n const controllerContract = getPayloadsController(client, payloadsController);\n const payload = await controllerContract.read.getPayloadById([payloadId]);\n const currentBlock = await getBlock(client);\n return client.setStorageAt({\n address: payloadsController,\n // 3 is the slot of the payloads mapping\n index: getSolidityStorageSlotUint(3n, BigInt(payloadId)),\n value: encodePacked(\n [\"uint40\", \"uint40\", \"uint8\", \"uint8\", \"address\"],\n [\n // we subtract 240n(4min), as tenderly might have been fallen behind\n // therefore using block_number -1 (latest on tenderly) and a 4min margin should give a save margin\n Number(currentBlock.timestamp - BigInt(payload.delay) - 1n - 240n), // altering queued time so can be executed in current block\n payload.createdAt,\n PayloadState.Queued,\n payload.maximumAccessLevelRequired,\n payload.creator,\n ],\n ),\n });\n}\n\nexport function isPayloadFinal(state: PayloadState) {\n return ![PayloadState.Queued, PayloadState.Created].includes(state);\n}\n\nexport async function getNonFinalizedPayloads<T extends Client>(\n client: T,\n payloadsController: Address,\n): Promise<number[]> {\n const controllerContract = getPayloadsController(client, payloadsController);\n const payloadsCount = await controllerContract.read.getPayloadsCount();\n const nonFinalPayloads: number[] = [];\n for (let payloadId = payloadsCount - 1; payloadId != 0; payloadId--) {\n // controllerContract.read.EXPIRATION_DELAY(), controllerContract.read.MAX_EXECUTION_DELAY(), controllerContract.read.GRACE_PERIOD()\n const maxRange = (35 + 10 + 7) * 24 * 60 * 60;\n const payload = await controllerContract.read.getPayloadById([payloadId]);\n if (!isPayloadFinal(payload.state)) nonFinalPayloads.push(payloadId);\n // If the payload was created longer then maxRange in the past, we now everything that was created before will be expired as well\n if (payload.createdAt < Date.now() / 1000 - maxRange) break;\n }\n return nonFinalPayloads;\n}\n","import {\n type Hex,\n concat,\n encodeAbiParameters,\n fromHex,\n getAddress,\n keccak256,\n pad,\n parseAbiParameters,\n slice,\n toBytes,\n toHex,\n trim,\n} from \"viem\";\n/**\n * @notice Returns the storage slot for a Solidity mapping with bytes32 keys, given the slot of the mapping itself\n * @dev Read more at https://docs.soliditylang.org/en/latest/internals/layout_in_storage.html#mappings-and-dynamic-arrays\n * @param mappingSlot Mapping slot in storage\n * @param key Mapping key to find slot for\n * @returns Storage slot\n */\nexport function getSolidityStorageSlotBytes(mappingSlot: Hex, key: Hex) {\n const slot = pad(mappingSlot, { size: 32 });\n return trim(\n keccak256(\n encodeAbiParameters(parseAbiParameters(\"bytes32, uint256\"), [\n key,\n BigInt(slot),\n ]),\n ),\n );\n}\n\n/**\n * @notice Returns the storage slot for a Solidity mapping with uint keys, given the slot of the mapping itself\n * @dev Read more at https://docs.soliditylang.org/en/latest/internals/layout_in_storage.html#mappings-and-dynamic-arrays\n * @param mappingSlot Mapping slot in storage\n * @param key Mapping key to find slot for\n * @returns Storage slot\n */\nexport function getSolidityStorageSlotUint(mappingSlot: bigint, key: bigint) {\n return keccak256(\n encodeAbiParameters(parseAbiParameters(\"uint256, uint256\"), [\n key,\n mappingSlot,\n ]),\n );\n}\n\nexport function getSolidityStorageSlotAddress(\n mappingSlot: bigint | number,\n key: Hex,\n) {\n return keccak256(\n encodeAbiParameters(parseAbiParameters(\"address, uint256\"), [\n key,\n BigInt(mappingSlot),\n ]),\n );\n}\n\n/**\n * Returns the slot of an array item\n * @param baseSlot baseSlot of the array size pointer\n * @param arrayIndex index within the array\n * @param itemSize number of slots consumed per array item\n * @returns\n */\nexport function getDynamicArraySlot(\n baseSlot: bigint,\n arrayIndex: number,\n itemSize: number,\n): Hex {\n return pad(\n toHex(\n fromHex(\n keccak256(\n encodeAbiParameters(parseAbiParameters(\"uint256\"), [baseSlot]),\n ),\n \"bigint\",\n ) + BigInt(arrayIndex * itemSize),\n ),\n { size: 32 },\n );\n}\n\n/**\n * https://ethereum.stackexchange.com/questions/107282/storage-and-memory-layout-of-strings\n * @param value string | bytes\n */\nexport function getBytesValue(value: string | Hex) {\n const bytesString = toBytes(value);\n if (bytesString.length > 31)\n throw new Error(\"Error: strings > 31 bytes are not implemented\");\n return concat([\n toHex(pad(bytesString, { size: 31, dir: \"right\" })),\n toHex(bytesString.length * 2, { size: 1 }),\n ]);\n}\n\nexport function bytes32ToAddress(bytes32: Hex) {\n return getAddress(slice(bytes32, 12, 32));\n}\n","import { IGovernanceCore_ABI } from \"@bgd-labs/aave-address-book/abis\";\nimport {\n Address,\n Client,\n fromHex,\n getContract,\n GetContractReturnType,\n Hex,\n TestClient,\n toHex,\n} from \"viem\";\nimport { getBlock, getStorageAt } from \"viem/actions\";\nimport { getSolidityStorageSlotUint } from \"../../math/slot\";\nimport { setBits } from \"../../math/binary\";\n\nexport enum ProposalState {\n Null = 0, // proposal does not exists\n Created = 1, // created, waiting for a cooldown to initiate the balances snapshot\n Active = 2, // balances snapshot set, voting in progress\n Queued = 3, // voting results submitted, but proposal is under grace period when guardian can cancel it\n Executed = 4, // results sent to the execution chain(s)\n Failed = 5, // voting was not successful\n Cancelled = 6, // got cancelled by guardian, or because proposition power of creator dropped below allowed minimum\n Expired = 7,\n}\n\nexport const HUMAN_READABLE_PROPOSAL_STATE = {\n [ProposalState.Null]: \"Null\",\n [ProposalState.Created]: \"Created\",\n [ProposalState.Active]: \"Active\",\n [ProposalState.Queued]: \"Queued\",\n [ProposalState.Executed]: \"Executed\",\n [ProposalState.Failed]: \"Failed\",\n [ProposalState.Cancelled]: \"Cancelled\",\n [ProposalState.Expired]: \"Expired\",\n};\n\nexport type GovernanceContract = GetContractReturnType<\n typeof IGovernanceCore_ABI,\n Client\n>;\n\nexport function getGovernance<T extends Client>(\n client: T,\n address: Hex,\n): GovernanceContract {\n return getContract({\n abi: IGovernanceCore_ABI,\n client,\n address,\n });\n}\n\nexport async function makeProposalExecutableOnTestClient(\n client: TestClient,\n governance: Address,\n proposalId: bigint,\n) {\n const currentBlock = await getBlock(client);\n // 7n is the base slot of the proposal mapping\n const proposalSlot = getSolidityStorageSlotUint(7n, proposalId);\n const data = await getStorageAt(client, {\n address: governance,\n slot: proposalSlot,\n });\n let manipulatedStorage = fromHex(data!, { to: \"bigint\" });\n // set queued\n manipulatedStorage = setBits(\n manipulatedStorage,\n 0n,\n 8n,\n ProposalState.Queued,\n );\n // set creation time\n manipulatedStorage = setBits(\n manipulatedStorage,\n 16n,\n 56n,\n currentBlock.timestamp - 2592000n, // (await governanceContract.read.PROPOSAL_EXPIRATION_TIME())\n );\n return client.setStorageAt({\n address: governance,\n // 3 is the slot of the payloads mapping\n index: proposalSlot,\n value: toHex(manipulatedStorage, { size: 32 }),\n });\n}\n\nexport function isProposalFinal(state: ProposalState) {\n return ![\n ProposalState.Queued,\n ProposalState.Created,\n ProposalState.Active,\n ].includes(state);\n}\n\nexport async function getNonFinalizedProposals<T extends Client>(\n client: T,\n governanceAddress: Address,\n): Promise<bigint[]> {\n const goverannceContract = getGovernance(client, governanceAddress);\n const proposalsCount = await goverannceContract.read.getProposalsCount();\n const nonFinalProposals: bigint[] = [];\n for (let proposalId = proposalsCount - 1n; proposalId != 0n; proposalId--) {\n const proposal = await goverannceContract.read.getProposal([proposalId]);\n if (isProposalFinal(proposal.state)) nonFinalProposals.push(proposalId);\n // If the payload was created longer then expiration time in the past we no longer care\n if (proposal.creationTime < Date.now() / 1000 - 2592000) break;\n }\n return nonFinalProposals;\n}\n","// AUTOGENERATED: DO NOT MANUALLY EDIT THIS FILE\nexport const etherscanExplorers = {\n 1: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://etherscan.io\"\n },\n 10: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://optimistic.etherscan.io/\"\n },\n 25: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://cronoscan.com\"\n },\n 50: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://xdcscan.com/\"\n },\n 51: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.xdcscan.com/\"\n },\n 56: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://bscscan.com\"\n },\n 97: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.bscscan.com\"\n },\n 100: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://gnosisscan.io/\"\n },\n 130: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://uniscan.xyz/\"\n },\n 137: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://polygonscan.com\"\n },\n 146: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sonicscan.org/\"\n },\n 199: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://bttcscan.com/\"\n },\n 204: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://opbnb.bscscan.com/\"\n },\n 250: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://ftmscan.com\"\n },\n 252: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://fraxscan.com/\"\n },\n 255: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://kromascan.com/\"\n },\n 300: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia-era.zksync.network/\"\n },\n 324: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://era.zksync.network/\"\n },\n 480: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://worldscan.org/\"\n },\n 1028: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.bttcscan.com/\"\n },\n 1101: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://zkevm.polygonscan.com/\"\n },\n 1111: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://wemixscan.com/\"\n },\n 1112: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.wemixscan.com/\"\n },\n 1284: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://moonbeam.moonscan.io/\"\n },\n 1285: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://moonriver.moonscan.io/\"\n },\n 1287: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://moonbase.moonscan.io/\"\n },\n 1301: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.uniscan.xyz/\"\n },\n 2358: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.kromascan.com/\"\n },\n 2442: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://cardona-zkevm.polygonscan.com/\"\n },\n 2522: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://holesky.fraxscan.com/\"\n },\n 2741: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://abscan.org/\"\n },\n 4002: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.ftmscan.com/\"\n },\n 4801: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.worldscan.org/\"\n },\n 5000: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://mantlescan.xyz/\"\n },\n 5003: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.mantlescan.xyz/\"\n },\n 5611: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://opbnb-testnet.bscscan.com/\"\n },\n 8453: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://basescan.org\"\n },\n 11124: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.abscan.org/\"\n },\n 17000: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.etherscan.io\"\n },\n 33111: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://curtis.apescan.io/\"\n },\n 33139: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://apescan.io/\"\n },\n 42161: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://arbiscan.io\"\n },\n 42170: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://nova.arbiscan.io/\"\n },\n 42220: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://celoscan.io\"\n },\n 43113: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.snowscan.xyz/\"\n },\n 43114: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://snowscan.xyz/\"\n },\n 44787: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://alfajores.celoscan.io/\"\n },\n 50104: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sophscan.xyz/\"\n },\n 57054: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.sonicscan.org/\"\n },\n 59141: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.lineascan.build/\"\n },\n 59144: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://lineascan.build/\"\n },\n 80002: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://amoy.polygonscan.com/\"\n },\n 80094: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://berascan.com/\"\n },\n 81457: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://blastscan.io/\"\n },\n 84532: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.basescan.org/\"\n },\n 167000: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://taikoscan.io/\"\n },\n 167009: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://hekla.taikoscan.io/\"\n },\n 421614: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.arbiscan.io/\"\n },\n 534351: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.scrollscan.com/\"\n },\n 534352: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://scrollscan.com/\"\n },\n 660279: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://xaiscan.io/\"\n },\n 11155111: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.etherscan.io\"\n },\n 11155420: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia-optimism.etherscan.io/\"\n },\n 168587773: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.blastscan.io/\"\n },\n 531050104: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://testnet.sophscan.xyz/\"\n },\n 37714555429: {\n api: \"https://api.etherscan.io/v2/api\",\n explorer: \"https://sepolia.xaiscan.io/\"\n }\n} as const;","// AUTOGENERATED: DO NOT MANUALLY EDIT THIS FILE\nexport const routescanExplorers = {\n 1: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/1/etherscan\",\n explorer: \"1.routescan.io\"\n },\n 10: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/10/etherscan\",\n explorer: \"10.routescan.io\"\n },\n 14: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/14/etherscan\",\n explorer: \"14.routescan.io\"\n },\n 16: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/16/etherscan\",\n explorer: \"16.routescan.io\"\n },\n 19: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/19/etherscan\",\n explorer: \"19.routescan.io\"\n },\n 56: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/56/etherscan\",\n explorer: \"56.routescan.io\"\n },\n 97: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/97/etherscan\",\n explorer: \"97.routescan.io\"\n },\n 114: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/114/etherscan\",\n explorer: \"114.routescan.io\"\n },\n 146: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/146/etherscan\",\n explorer: \"146.routescan.io\"\n },\n 151: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/151/etherscan\",\n explorer: \"151.routescan.io\"\n },\n 166: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/166/etherscan\",\n explorer: \"166.routescan.io\"\n },\n 169: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/169/etherscan\",\n explorer: \"169.routescan.io\"\n },\n 183: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/183/etherscan\",\n explorer: \"183.routescan.io\"\n },\n 185: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/185/etherscan\",\n explorer: \"185.routescan.io\"\n },\n 233: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/233/etherscan\",\n explorer: \"233.routescan.io\"\n },\n 252: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/252/etherscan\",\n explorer: \"252.routescan.io\"\n },\n 254: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/254/etherscan\",\n explorer: \"254.routescan.io\"\n },\n 255: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/255/etherscan\",\n explorer: \"255.routescan.io\"\n },\n 288: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/288/etherscan\",\n explorer: \"288.routescan.io\"\n },\n 291: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/291/etherscan\",\n explorer: \"291.routescan.io\"\n },\n 301: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/301/etherscan\",\n explorer: \"301.routescan.io\"\n },\n 303: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/303/etherscan\",\n explorer: \"303.routescan.io\"\n },\n 324: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/324/etherscan\",\n explorer: \"324.routescan.io\"\n },\n 335: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/335/etherscan\",\n explorer: \"335.routescan.io\"\n },\n 357: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/357/etherscan\",\n explorer: \"357.routescan.io\"\n },\n 480: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/480/etherscan\",\n explorer: \"480.routescan.io\"\n },\n 719: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/719/etherscan\",\n explorer: \"719.routescan.io\"\n },\n 749: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/749/etherscan\",\n explorer: \"749.routescan.io\"\n },\n 919: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/919/etherscan\",\n explorer: \"919.routescan.io\"\n },\n 1010: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/1010/etherscan\",\n explorer: \"1010.routescan.io\"\n },\n 1088: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/1088/etherscan\",\n explorer: \"1088.routescan.io\"\n },\n 1135: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/1135/etherscan\",\n explorer: \"1135.routescan.io\"\n },\n 1234: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/1234/etherscan\",\n explorer: \"1234.routescan.io\"\n },\n 1294: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/1294/etherscan\",\n explorer: \"1294.routescan.io\"\n },\n 1301: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/1301/etherscan\",\n explorer: \"1301.routescan.io\"\n },\n 1687: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/1687/etherscan\",\n explorer: \"1687.routescan.io\"\n },\n 1853: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/1853/etherscan\",\n explorer: \"1853.routescan.io\"\n },\n 1923: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/1923/etherscan\",\n explorer: \"1923.routescan.io\"\n },\n 1946: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/1946/etherscan\",\n explorer: \"1946.routescan.io\"\n },\n 2037: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/2037/etherscan\",\n explorer: \"2037.routescan.io\"\n },\n 2044: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/2044/etherscan\",\n explorer: \"2044.routescan.io\"\n },\n 2233: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/2233/etherscan\",\n explorer: \"2233.routescan.io\"\n },\n 2358: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/2358/etherscan\",\n explorer: \"2358.routescan.io\"\n },\n 2522: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/2522/etherscan\",\n explorer: \"2522.routescan.io\"\n },\n 2818: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/2818/etherscan\",\n explorer: \"2818.routescan.io\"\n },\n 3011: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/3011/etherscan\",\n explorer: \"3011.routescan.io\"\n },\n 3012: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/3012/etherscan\",\n explorer: \"3012.routescan.io\"\n },\n 3636: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/3636/etherscan\",\n explorer: \"3636.routescan.io\"\n },\n 3939: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/3939/etherscan\",\n explorer: \"3939.routescan.io\"\n },\n 4202: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/4202/etherscan\",\n explorer: \"4202.routescan.io\"\n },\n 4337: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/4337/etherscan\",\n explorer: \"4337.routescan.io\"\n },\n 4460: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/4460/etherscan\",\n explorer: \"4460.routescan.io\"\n },\n 4801: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/4801/etherscan\",\n explorer: \"4801.routescan.io\"\n },\n 5000: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/5000/etherscan\",\n explorer: \"5000.routescan.io\"\n },\n 5330: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/5330/etherscan\",\n explorer: \"5330.routescan.io\"\n },\n 5566: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/5566/etherscan\",\n explorer: \"5566.routescan.io\"\n },\n 6119: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/6119/etherscan\",\n explorer: \"6119.routescan.io\"\n },\n 6900: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/6900/etherscan\",\n explorer: \"6900.routescan.io\"\n },\n 6911: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/6911/etherscan\",\n explorer: \"6911.routescan.io\"\n },\n 7171: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/7171/etherscan\",\n explorer: \"7171.routescan.io\"\n },\n 7210: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/7210/etherscan\",\n explorer: \"7210.routescan.io\"\n },\n 7222: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/7222/etherscan\",\n explorer: \"7222.routescan.io\"\n },\n 7560: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/7560/etherscan\",\n explorer: \"7560.routescan.io\"\n },\n 7700: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/7700/etherscan\",\n explorer: \"7700.routescan.io\"\n },\n 7887: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/7887/etherscan\",\n explorer: \"7887.routescan.io\"\n },\n 7979: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/7979/etherscan\",\n explorer: \"7979.routescan.io\"\n },\n 8008: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/8008/etherscan\",\n explorer: \"8008.routescan.io\"\n },\n 8082: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/8082/etherscan\",\n explorer: \"8082.routescan.io\"\n },\n 8453: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/8453/etherscan\",\n explorer: \"8453.routescan.io\"\n },\n 8888: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/8888/etherscan\",\n explorer: \"8888.routescan.io\"\n },\n 9728: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/9728/etherscan\",\n explorer: \"9728.routescan.io\"\n },\n 10507: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/10507/etherscan\",\n explorer: \"10507.routescan.io\"\n },\n 10849: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/10849/etherscan\",\n explorer: \"10849.routescan.io\"\n },\n 10880: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/10880/etherscan\",\n explorer: \"10880.routescan.io\"\n },\n 10888: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/10888/etherscan\",\n explorer: \"10888.routescan.io\"\n },\n 11124: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/11124/etherscan\",\n explorer: \"11124.routescan.io\"\n },\n 12150: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/12150/etherscan\",\n explorer: \"12150.routescan.io\"\n },\n 17000: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/17000/etherscan\",\n explorer: \"17000.routescan.io\"\n },\n 26659: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/26659/etherscan\",\n explorer: \"26659.routescan.io\"\n },\n 28882: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/28882/etherscan\",\n explorer: \"28882.routescan.io\"\n },\n 31335: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/31335/etherscan\",\n explorer: \"31335.routescan.io\"\n },\n 34443: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/34443/etherscan\",\n explorer: \"34443.routescan.io\"\n },\n 42026: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/42026/etherscan\",\n explorer: \"42026.routescan.io\"\n },\n 42069: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/42069/etherscan\",\n explorer: \"42069.routescan.io\"\n },\n 42161: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/42161/etherscan\",\n explorer: \"42161.routescan.io\"\n },\n 43113: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/43113/etherscan\",\n explorer: \"43113.routescan.io\"\n },\n 43114: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/43114/etherscan\",\n explorer: \"43114.routescan.io\"\n },\n 43288: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/43288/etherscan\",\n explorer: \"43288.routescan.io\"\n },\n 48795: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/48795/etherscan\",\n explorer: \"48795.routescan.io\"\n },\n 49321: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/49321/etherscan\",\n explorer: \"49321.routescan.io\"\n },\n 53123: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/53123/etherscan\",\n explorer: \"53123.routescan.io\"\n },\n 53302: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/53302/etherscan\",\n explorer: \"53302.routescan.io\"\n },\n 53935: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/53935/etherscan\",\n explorer: \"53935.routescan.io\"\n },\n 55551: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/55551/etherscan\",\n explorer: \"55551.routescan.io\"\n },\n 56288: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/56288/etherscan\",\n explorer: \"56288.routescan.io\"\n },\n 57054: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/57054/etherscan\",\n explorer: \"57054.routescan.io\"\n },\n 57073: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/57073/etherscan\",\n explorer: \"57073.routescan.io\"\n },\n 60118: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/60118/etherscan\",\n explorer: \"60118.routescan.io\"\n },\n 62707: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/62707/etherscan\",\n explorer: \"62707.routescan.io\"\n },\n 70800: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/70800/etherscan\",\n explorer: \"70800.routescan.io\"\n },\n 70953: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/70953/etherscan\",\n explorer: \"70953.routescan.io\"\n },\n 78170: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/78170/etherscan\",\n explorer: \"78170.routescan.io\"\n },\n 80000: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/80000/etherscan\",\n explorer: \"80000.routescan.io\"\n },\n 80002: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/80002/etherscan\",\n explorer: \"80002.routescan.io\"\n },\n 80008: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/80008/etherscan\",\n explorer: \"80008.routescan.io\"\n },\n 80069: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/80069/etherscan\",\n explorer: \"80069.routescan.io\"\n },\n 80084: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/80084/etherscan\",\n explorer: \"80084.routescan.io\"\n },\n 80085: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/80085/etherscan\",\n explorer: \"80085.routescan.io\"\n },\n 80094: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/80094/etherscan\",\n explorer: \"80094.routescan.io\"\n },\n 81457: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/81457/etherscan\",\n explorer: \"81457.routescan.io\"\n },\n 84532: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/84532/etherscan\",\n explorer: \"84532.routescan.io\"\n },\n 88882: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/88882/etherscan\",\n explorer: \"88882.routescan.io\"\n },\n 88888: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/88888/etherscan\",\n explorer: \"88888.routescan.io\"\n },\n 124832: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/124832/etherscan\",\n explorer: \"124832.routescan.io\"\n },\n 167000: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/167000/etherscan\",\n explorer: \"167000.routescan.io\"\n },\n 167008: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/167008/etherscan\",\n explorer: \"167008.routescan.io\"\n },\n 167009: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/167009/etherscan\",\n explorer: \"167009.routescan.io\"\n },\n 173750: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/173750/etherscan\",\n explorer: \"173750.routescan.io\"\n },\n 421614: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/421614/etherscan\",\n explorer: \"421614.routescan.io\"\n },\n 432201: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/432201/etherscan\",\n explorer: \"432201.routescan.io\"\n },\n 432204: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/432204/etherscan\",\n explorer: \"432204.routescan.io\"\n },\n 504441: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/504441/etherscan\",\n explorer: \"504441.routescan.io\"\n },\n 555666: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/555666/etherscan\",\n explorer: \"555666.routescan.io\"\n },\n 710420: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/710420/etherscan\",\n explorer: \"710420.routescan.io\"\n },\n 763373: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/763373/etherscan\",\n explorer: \"763373.routescan.io\"\n },\n 779672: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/779672/etherscan\",\n explorer: \"779672.routescan.io\"\n },\n 999999: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/999999/etherscan\",\n explorer: \"999999.routescan.io\"\n },\n 1398243: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/1398243/etherscan\",\n explorer: \"1398243.routescan.io\"\n },\n 3397901: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/3397901/etherscan\",\n explorer: \"3397901.routescan.io\"\n },\n 7777777: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/7777777/etherscan\",\n explorer: \"7777777.routescan.io\"\n },\n 11155111: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/11155111/etherscan\",\n explorer: \"11155111.routescan.io\"\n },\n 11155420: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/11155420/etherscan\",\n explorer: \"11155420.routescan.io\"\n },\n 11155931: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/11155931/etherscan\",\n explorer: \"11155931.routescan.io\"\n },\n 12345678: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/12345678/etherscan\",\n explorer: \"12345678.routescan.io\"\n },\n 13068200: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/13068200/etherscan\",\n explorer: \"13068200.routescan.io\"\n },\n 20240603: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/20240603/etherscan\",\n explorer: \"20240603.routescan.io\"\n },\n 20241133: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/20241133/etherscan\",\n explorer: \"20241133.routescan.io\"\n },\n 21000000: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/21000000/etherscan\",\n explorer: \"21000000.routescan.io\"\n },\n 21000001: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/21000001/etherscan\",\n explorer: \"21000001.routescan.io\"\n },\n 28122024: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/28122024/etherscan\",\n explorer: \"28122024.routescan.io\"\n },\n 111557560: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/111557560/etherscan\",\n explorer: \"111557560.routescan.io\"\n },\n 168587773: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/168587773/etherscan\",\n explorer: \"168587773.routescan.io\"\n },\n 333000333: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/333000333/etherscan\",\n explorer: \"333000333.routescan.io\"\n },\n 420120000: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/420120000/etherscan\",\n explorer: \"420120000.routescan.io\"\n },\n 420120001: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/420120001/etherscan\",\n explorer: \"420120001.routescan.io\"\n },\n 686669576: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/686669576/etherscan\",\n explorer: \"686669576.routescan.io\"\n },\n 888888888: {\n api: \"https://api.routescan.io/v2/network/mainnet/evm/888888888/etherscan\",\n explorer: \"888888888.routescan.io\"\n },\n 999999999: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/999999999/etherscan\",\n explorer: \"999999999.routescan.io\"\n },\n 920637907288165: {\n api: \"https://api.routescan.io/v2/network/testnet/evm/920637907288165/etherscan\",\n explorer: \"920637907288165.routescan.io\"\n }\n} as const;","import { Address, Hex } from \"viem\";\nimport { etherscanExplorers } from \"./generated/etherscanExplorers\";\nimport { routescanExplorers } from \"./generated/routescanExplorers\";\nimport { StandardJsonInput } from \"./types\";\n\nexport type ExplorerConfig = { api: string; explorer: string };\n\n/**\n * Fetches what we consider the \"best\" explorer for a given chain.\n * For our tooling we have a opinionated priorization for explorers:\n * 1. Etherscan\n * 2. Routescan\n * 3. Blockscout and others\n * @param chainId Id of the chain to fetch the explorer for\n */\nexport function getExplorer(chainId: number): ExplorerConfig {\n const etherscan =\n etherscanExplorers[chainId as keyof typeof etherscanExplorers];\n if (etherscan) return etherscan;\n const routescan =\n routescanExplorers[chainId as keyof typeof routescanExplorers];\n if (routescan) return routescan;\n throw new Error(`No explorer found for chainId: ${chainId}`);\n}\n\ntype GetSourceCodeParams = {\n chainId: number;\n address: Address;\n apiUrl?: string;\n apiKey?: string;\n};\n\nexport async function getSourceCode(params: GetSourceCodeParams) {\n const payload = {\n chainid: String(params.chainId),\n address: params.address,\n module: \"contract\",\n action: \"getsourcecode\",\n };\n if (params.apiKey) (payload as any).apikey = params.apiKey;\n const formattedPayload = new URLSearchParams(payload).toString();\n const url = `${params.apiUrl ? params.apiUrl : getExplorer(params.chainId).api}?${formattedPayload}`;\n const request = await fetch(url);\n const { status, message, result } = (await request.json()) as {\n message: string;\n result: {\n ABI: any;\n CompilerVersion: string;\n ConstructorArguments: Hex;\n ContractName: string;\n EVMVersion: string;\n Implementation: Address;\n Library: string;\n LicenseType: string;\n OptimizationUsed: string;\n Proxy: string; // \"1\" meaning true (i think)\n Runs: string;\n SimilarMatch: string;\n SourceCode: string;\n }[];\n status: string;\n };\n if (status != \"1\") {\n throw new Error(result as unknown as string);\n }\n return result[0];\n}\n\nexport function parseEtherscanStyleSourceCode(\n sourceCode: string,\n): StandardJsonInput {\n // Handling possible variations in SourceCode format\n if (sourceCode.startsWith(\"{{\") && sourceCode.endsWith(\"}}\")) {\n // Strip the extra curly braces and parse\n sourceCode = sourceCode.substring(1, sourceCode.length - 1);\n }\n return JSON.parse(sourceCode);\n}\n","/**\n * While tenderly is a fenomanal tool for testing, it is not always easy to use as there are minor bugs and small nuances to consider everywhere.\n * This is a simple wrapper around the tenderly APIs.\n */\nimport {\n Hex,\n TestClient,\n WalletClient,\n createTestClient,\n createWalletClient,\n http,\n} from \"viem\";\n\ntype TenderlyConfig = {\n accountSlug: string;\n projectSlug: string;\n accessToken: string;\n};\n\ntype Tenderly_createVnetParams = {\n slug: string;\n displayName: string;\n baseChainId: number;\n forkChainId: number;\n blockNumber?: Hex;\n // deletes the existing fork in case a fork with the same name already exists\n force?: boolean;\n};\n\nexport type Tenderly_createVnetParamsResponse = {\n id: string;\n slug: string;\n display_name: number;\n fork_config: { network_id: number; block_number: Hex };\n virtual_network_config: {\n chain_config: { chain_id: number };\n accounts: { address: string }[];\n };\n rpcs: [\n { url: string; name: \"Admin RPC\" },\n { url: string; name: \"Public RPC\" },\n ];\n};\n\nconst TENDERLY_BASE_URL = \"https://api.tenderly.co/api/v1\";\n\nexport async function tenderly_deleteVnet(\n vnetId: string,\n { accountSlug, projectSlug, accessToken }: TenderlyConfig,\n) {\n return fetch(\n `${TENDERLY_BASE_URL}/account/${accountSlug}/project/${projectSlug}/vnets/${vnetId}`,\n {\n method: \"DELETE\",\n headers: new Headers({\n \"Content-Type\": \"application/json\",\n \"X-Access-Key\": accessToken,\n }),\n },\n );\n}\n\nexport async function tenderly_simVnet(\n vnetId: string,\n { accountSlug, projectSlug, accessToken }: TenderlyConfig,\n body: any,\n) {\n return (\n await fetch(\n // Note: this is subject to change and currently uses the internal api of tenderly\n `${TENDERLY_BASE_URL}/account/${accountSlug}/project/${projectSlug}/testnet/${vnetId}/simulate`,\n {\n method: \"POST\",\n body: JSON.stringify(body),\n headers: new Headers({\n \"Content-Type\": \"application/json\",\n \"X-Access-Key\": accessToken,\n }),\n },\n )\n ).json();\n}\n\nexport async function tenderly_getVnet(\n slug: string,\n { accountSlug, projectSlug, accessToken }: TenderlyConfig,\n): Promise<{ id: string; slug: string }[]> {\n return (\n await fetch(\n `${TENDERLY_BASE_URL}/account/${accountSlug}/project/${projectSlug}/vnets?match_field=slug&match_type=prefix&keywords=${slug}`,\n {\n method: \"GET\",\n headers: new Headers({\n \"Content-Type\": \"application/json\",\n \"X-Access-Key\": accessToken,\n }),\n },\n )\n ).json();\n}\n\nexport async function tenderly_createVnet(\n {\n slug,\n displayName,\n baseChainId,\n forkChainId,\n blockNumber,\n force,\n }: Tenderly_createVnetParams,\n { accessToken, accountSlug, projectSlug }: TenderlyConfig,\n) {\n if (!accessToken) throw new Error(\"Tenderly access token not provided\");\n if (!accountSlug) throw new Error(\"Tenderly account slug not provided\");\n if (!projectSlug) throw new Error(\"Tenderly project slug not provided\");\n const body = {\n slug: slug,\n display_name: displayName,\n fork_config: {\n network_id: baseChainId,\n ...(blockNumber ? { block_number: blockNumber } : {}),\n },\n virtual_network_config: {\n chain_config: {\n chain_id: forkChainId,\n },\n },\n sync_state_config: {\n enabled: false,\n },\n explorer_page_config: {\n enabled: false,\n verification_visibility: \"bytecode\",\n },\n };\n\n async function createVnet() {\n return (\n await fetch(\n `${TENDERLY_BASE_URL}/account/${accountSlug}/project/${projectSlug}/vnets`,\n {\n method: \"POST\",\n body: JSON.stringify(body),\n headers: new Headers({\n \"Content-Type\": \"application/json\",\n \"X-Access-Key\": accessToken,\n }),\n },\n )\n ).json() as Promise<Tenderly_createVnetParamsResponse>;\n }\n\n let response = await createVnet();\n if ((response as any).error?.slug === \"vnet_duplicate_key\" && force) {\n const staleVnet = await tenderly_getVnet(slug, {\n accessToken,\n accountSlug,\n projectSlug,\n });\n await tenderly_deleteVnet(staleVnet[0].id, {\n accessToken,\n accountSlug,\n projectSlug,\n });\n response = await createVnet();\n }\n if ((response as any).error) {\n console.info((response as any).error);\n throw new Error(\"Tenderly vnet could not be created\");\n }\n return {\n vnet: response,\n testClient: createTestClient({\n mode: \"tenderly\" as any,\n transport: http(response.rpcs[0].url),\n }) as TestClient,\n walletClient: createWalletClient({\n chain: { id: forkChainId } as any,\n account: \"0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9\",\n transport: http(response.rpcs[0].url),\n }) as WalletClient,\n simulate: (body: any) =>\n tenderly_simVnet(\n response.id,\n {\n accessToken,\n accountSlug,\n projectSlug,\n },\n body,\n ),\n delete: () =>\n tenderly_deleteVnet(response.id, {\n accessToken,\n accountSlug,\n projectSlug,\n }),\n };\n}\n","import { execSync } from \"node:child_process\";\nimport { StandardJsonInput } from \"./types\";\nimport { createPatch } from \"diff\";\n\n/**\n * Returns the standardJsonInput format as consumed by most explorers\n * @param input Contract or path:Contract if contract is not unique.\n */\nexport function foundry_getStandardJsonInput(input: string) {\n const output = JSON.parse(\n execSync(\n `forge verify-contract --show-standard-json-input --verifier etherscan 0x0000000000000000000000000000000000000000 ${input}`,\n ).toString(),\n ) as StandardJsonInput;\n return output;\n}\n\nexport type Storage = {\n astId: string;\n contract: string;\n label: string;\n offset: number;\n slot: number;\n type: string;\n};\n\nexport type StorageType = {\n encoding: string;\n label: string;\n numberOfBytes: number;\n base?: string;\n key?: string;\n value?: string;\n members?: {\n astId: string;\n contract: string;\n offset: number;\n slot: number;\n type: string;\n label: string;\n }[];\n};\n\nexport type FoundryStorage = {\n storage: Storage[];\n types: Record<string, StorageType>;\n};\n\nexport function foundry_getStorageLayout(input: string) {\n const output = JSON.parse(\n execSync(`forge inspect ${input} storage --json`).toString(),\n ) as FoundryStorage;\n return output;\n}\n\nfunction cleanupFoundryStorageForDiffing(layout: FoundryStorage) {\n const cleanTypes = { ...layout.types };\n for (const key of Object.keys(cleanTypes)) {\n if (cleanTypes[key].members)\n cleanTypes[key].members = cleanTypes[key].members.map((member) => ({\n label: member.label,\n contract: member.contract.split(\":\")[1],\n offset: member.offset,\n slot: member.slot,\n type: member.type,\n })) as any;\n if (cleanTypes[key].value)\n cleanTypes[key].value = cleanTypes[cleanTypes[key].value] as any;\n }\n const cleanStorage = layout.storage.map((storage) => ({\n label: storage.label,\n slot: storage.slot,\n offset: storage.offset,\n type: cleanTypes[storage.type],\n contract: storage.contract.split(\":\")[1],\n }));\n return cleanStorage;\n}\n\nexport function diffFoundryStorageLayout(\n layoutBefore: FoundryStorage,\n layoutAfter: FoundryStorage,\n) {\n const beforeString = JSON.stringify(\n cleanupFoundryStorageForDiffing(layoutBefore),\n null,\n 2,\n );\n const afterString = JSON.stringify(\n cleanupFoundryStorageForDiffing(layoutAfter),\n null,\n 2,\n );\n return createPatch(\"storage\", beforeString, afterString);\n}\n","// a manually maintained list of known events\nexport const EVENT_DB = [] as const;\n","export const erc1967_ImplementationSlot =\n \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\";\nexport const erc1967_AdminSlot =\n \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\";\n","import { createPatch, createTwoFilesPatch } from \"diff\";\nimport { format } from \"prettier/standalone\";\nimport solidityPlugin from \"prettier-plugin-solidity/standalone\";\nimport { StandardJsonInput } from \"../ecosystem/types\";\n\nconst prettierOptions = { parser: \"solidity-parse\", plugins: [solidityPlugin] };\n\nexport async function diffCode(\n before: StandardJsonInput,\n after: StandardJsonInput,\n) {\n const changes: Record<string, string> = {};\n\n // diff settings\n const settingsBefore = JSON.stringify(before.settings, null, 2);\n const settingsAfter = JSON.stringify(after.settings, null, 2);\n if (settingsBefore !== settingsAfter)\n changes.settings = createPatch(\"settings\", settingsBefore, settingsAfter);\n const contractsBefore = await Promise.all(\n Object.entries(before.sources).map(async ([path, source]) => [\n path.replace(/^.*[\\\\/]/, \"\"),\n path,\n await format(source.content, prettierOptions),\n ]),\n );\n const contractsAfter = await Promise.all(\n Object.entries(after.sources).map(async ([path, source]) => [\n path.replace(/^.*[\\\\/]/, \"\"),\n path,\n await format(source.content, prettierOptions),\n ]),\n );\n for (const [name, path, source] of contractsBefore) {\n const indexAfter = contractsAfter.findIndex(([_name]) => _name === name);\n // removed\n if (indexAfter === -1) {\n changes[name] = createPatch(path, source, \"\");\n } else {\n if (source !== contractsAfter[indexAfter][2])\n changes[name] = createTwoFilesPatch(\n path,\n contractsAfter[indexAfter][1],\n source,\n contractsAfter[indexAfter][2],\n );\n }\n }\n for (const [name, path, source] of contractsAfter) {\n const indexAfter = contractsBefore.findIndex(([_name]) => _name === name);\n // removed\n if (indexAfter === -1) {\n changes[name] = createPatch(path, \"\", source);\n }\n }\n return changes;\n}\n","import {\n Abi,\n Address,\n decodeEventLog,\n Hex,\n parseEventLogs,\n RpcLog,\n} from \"viem\";\n\ntype LogType = {\n topics: [Hex];\n data: Hex;\n emitter: Address;\n};\n\ninterface ParseLogsArgs {\n logs: LogType[];\n eventDb: Abi;\n}\n\nexport function parseLogs({ logs, eventDb }: ParseLogsArgs) {\n const parsedLogs = logs.map((log) => {\n try {\n const decoded = decodeEventLog({\n data: log.data,\n topics: log.topics,\n abi: eventDb,\n });\n return { ...log, ...decoded };\n } catch (e) {\n return log;\n }\n });\n\n return parsedLogs;\n}\n","import { Address, Client, Hex } from \"viem\";\nimport { getBytecode, getTransactionCount } from \"viem/actions\";\n\nconst STOP = 0x00;\nconst JUMPDEST = 0x5b;\nconst PUSH1 = 0x60;\nconst PUSH32 = 0x7f;\nconst RETURN = 0xf3;\nconst REVERT = 0xfd;\nconst INVALID = 0xfe;\nconst SELFDESTRUCT = 0xff;\nconst DELEGATECALL = 0xf4;\n\nconst isHalting = (opcode: number): boolean =>\n [STOP, RETURN, REVERT, INVALID, SELFDESTRUCT].includes(opcode);\nconst isPUSH = (opcode: number): boolean => opcode >= PUSH1 && opcode <= PUSH32;\n\nexport enum SelfdestuctCheckState {\n TRUSTED,\n EOA,\n EMPTY,\n DELEGATECALL,\n SAFE,\n SELF_DESTRUCT,\n}\n\nexport async function checkForSelfdestruct(\n client: Client,\n addresses: Address[],\n trustedAddresses: Address[],\n) {\n const result: { address: Address; state: SelfdestuctCheckState }[] = [];\n for (const address of addresses) {\n if (trustedAddresses.includes(address)) {\n result.push({ address, state: SelfdestuctCheckState.TRUSTED });\n continue;\n }\n const code = await getBytecode(client, { address });\n if (!code) {\n // If there is no code and nonce is > 0 then it's an EOA.\n // If nonce is 0 it is an empty account that might have code later.\n // A contract might have nonce > 0, but then it will have code.\n // If it had code, but was selfdestructed, the nonce should be reset to 0.\n const nonce = await getTransactionCount(client, { address });\n if (nonce > 0) result.push({ address, state: SelfdestuctCheckState.EOA });\n else result.push({ address, state: SelfdestuctCheckState.EMPTY });\n continue;\n }\n\n // Detection logic from https://github.com/MrLuit/selfdestruct-detect\n const bytecode = Buffer.from(code.substring(2), \"hex\");\n const { delegatecall, selfDestruct } = checkCode(bytecode);\n if (selfDestruct) {\n result.push({ address, state: SelfdestuctCheckState.SELF_DESTRUCT });\n } else if (delegatecall) {\n result.push({ address, state: SelfdestuctCheckState.DELEGATECALL });\n } else {\n result.push({ address, state: SelfdestuctCheckState.SAFE });\n }\n }\n return result;\n}\n\nfunction checkCode(bytecode: Buffer) {\n let halted = false;\n let delegatecall = false;\n for (let index = 0; index < bytecode.length; index++) {\n const opcode = bytecode[index];\n if (opcode === SELFDESTRUCT && !halted) {\n return { halted, delegatecall, selfDestruct: true };\n }\n if (opcode === DELEGATECALL && !halted) {\n delegatecall = true;\n } else if (opcode === JUMPDEST) {\n halted = false;\n } else if (isHalting(opcode)) {\n halted = true;\n } else if (isPUSH(opcode)) {\n index += opcode - PUSH1 + 0x01;\n }\n }\n return { halted, delegatecall, selfDestruct: false };\n}\n","import { Address } from \"viem\";\nimport { getSourceCode } from \"../ecosystem/explorers\";\n\ninterface GetVerificationStatusParams {\n chainId: number;\n addresses: Address[];\n contractDb: Record<Address, string>;\n apiKey?: string;\n apiUrl?: string;\n}\n\nenum VerificationStatus {\n CACHE,\n NEW,\n ERROR,\n}\n\nexport function getVerificationStatus({\n chainId,\n addresses,\n contractDb,\n apiKey,\n apiUrl,\n}: GetVerificationStatusParams) {\n return Promise.all(\n addresses.map(async (address) => {\n if (contractDb[address])\n return {\n address,\n name: contractDb[address],\n status: VerificationStatus.CACHE,\n };\n try {\n const code = await getSourceCode({ chainId, address, apiKey, apiUrl });\n return {\n address,\n name: code.ContractName,\n status: VerificationStatus.NEW,\n };\n } catch (e) {\n return {\n address,\n status: VerificationStatus.ERROR,\n };\n }\n }),\n );\n}\n","import { Client } from \"viem\";\nimport { EVENT_DB } from \"../ecosystem/event-db\";\nimport { parseLogs } from \"./logs\";\nimport { checkForSelfdestruct } from \"./selfdestruct\";\nimport { getVerificationStatus } from \"./verified\";\n\ntype RenderTenderlyReportParams = {\n client: Client;\n sim: any;\n};\n\nexport async function renderTenderlyReport({\n client,\n sim,\n}: RenderTenderlyReportParams) {\n const logs = parseLogs({\n logs: (sim.transaction.transaction_info.logs || []).map((l: any) => l.raw),\n eventDb: EVENT_DB,\n });\n const selfDestruct = checkForSelfdestruct(\n client,\n sim.transaction.addresses,\n [], // trusted addresses\n );\n const verified = getVerificationStatus({\n chainId: client.chain!.id,\n addresses: sim.transaction.addresses,\n contractDb: {},\n });\n\n return logs;\n}\n"],"mappings":"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ACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;YACd,YAAY;cACV;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;YACF;UACF;QACF;MACF;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;YACd,YAAY;cACV;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;YACF;UACF;QACF;MACF;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;AACF;;;ACtfO,IAAM,sBAAsB;EACjC;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;MACA;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;YACd,YAAY;cACV;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;cACA;gBACE,MAAM;gBACN,MAAM;gBACN,cAAc;cAChB;YACF;UACF;QACF;MACF;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ,CAAC;IACT,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS;MACP;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;MAChB;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;IACF;IACA,SAAS,CAAC;IACV,iBAAiB;EACnB;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;QACd,YAAY;UACV;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;UACA;YACE,MAAM;YACN,MAAM;YACN,cAAc;UAChB;QACF;MACF;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;IACF;IACA,WAAW;EACb;EACA;IACE,MAAM;IACN,MAAM;IACN,QAAQ;MACN;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QACN,SAAS;QACT,cAAc;MAChB;MACA;QACE,MAAM;QACN,MAAM;QAC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I;AAAA,IACF,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,IAAI;AAAA,IACF,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,IAAI;AAAA,IACF,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,IAAI;AAAA,IACF,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,IAAI;AAAA,IACF,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,IAAI;AAAA,IACF,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,MAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,KAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAA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","names":["import_viem","PayloadState","import_viem","import_actions","ProposalState","import_viem","body","import_diff","import_standalone","solidityPlugin","import_viem","import_actions","SelfdestuctCheckState"]}
|