@bgd-labs/toolbox 0.0.1 → 0.0.2
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 +221 -2
- package/dist/index.d.ts +221 -2
- package/dist/index.js +2080 -2
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +2067 -1
- package/dist/index.mjs.map +1 -0
- package/package.json +16 -11
|
@@ -0,0 +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 (const payloadId of [...Array(Number(payloadsCount)).keys()].reverse()) {\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 declare 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","// 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 parseApiSourceCode(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 { parseApiSourceCode } from \"../ecosystem/explorers\";\n\nconst prettierOptions = { parser: \"solidity-parse\", plugins: [solidityPlugin] };\n\nexport async function diffCode(codeBefore: string, codeAfter: string) {\n const before = parseApiSourceCode(codeBefore);\n const after = parseApiSourceCode(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":"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AAc;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,cAAc;MAChB;I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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,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","names":["import_viem","PayloadState","import_viem","import_actions","import_viem","body","import_standalone","solidityPlugin"]}
|